Powershell获取
我试图从批处理文件test.bat运行Powershell命令。 我实际上是从Python Popen调用这个命令,而不是从test.bat。(我使用test.bat只是为了验证)
powershell.exe (Get-NetAdapterAdvancedProperty -Name "SLOT 1" -DisplayName "Jumbo Packet").DisplayValue
同样的命令可以在python和批处理中使用第二个参数-DisplayName“Jumbo Packet”
下面是我使用第二个参数时出现的错误:
Get-NetAdapterAdvancedProperty:无法找到接受参数'1'的位置参数。 在行:1 char:2 +(Get-NetAdapterAdvancedProperty -Name SLOT 1 -DisplayName:Jumbo Packet).DisplayV ... + ~~~~~~~~~~~~~~~~~~~~~~ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜+ InvalidArgument:(:) [Get-NetAdapterAdvancedProp erty],ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound,Get-NetAdapterAdvanc edProperty
*但是,如果我从Powershell窗口运行相同的命令,我得到了我的预期结果。
(Get-NetAdapterAdvancedProperty -Name "SLOT 1" -DisplayName "Jumbo Packet").DisplayValue
我是Powershell的新手。感谢您的帮助
Python代码:
iface="SLOT 1"
cmd= 'powershell.exe (Get-NetAdapterAdvancedProperty -Name "'+ iface +'" -DisplayName "Jumbo Packet").DisplayValue'
conn.modules.os.popen(cmd).read()
括号在命令中有特殊的含义。 用脱字符将它们脱掉。 引号可能还需要使用脱字符来转义。
但为什么是间接的。 PS使用WMI。 WMI也可以通过COM访问。 Python可以做COM。
这是VBScript拔出nics。 你应该可以用任何支持COM的语言(几乎全部)来完成这项工作。
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!.rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_NetworkAdaptor")
For Each objItem in colItems
msgbox objitem.name
Next
在整个命令字符串周围放置双引号(使整个命令成为CMD的字符串)。 在双引号字符串中使用单引号来定义PowerShell的嵌套字符串:
powershell.exe "Get-NetAdapterAdvancedProperty -Name 'SLOT 1' -DisplayName 'Jumbo Packet').DisplayValue"
或者使用反斜杠转义嵌套双引号:
powershell.exe "Get-NetAdapterAdvancedProperty -Name "SLOT 1" -DisplayName "Jumbo Packet").DisplayValue"
但是,通常将PowerShell命令放入脚本并使用PowerShell运行该脚本并不麻烦:
powershell.exe -File "C:pathtoyour.ps1"
链接地址: http://www.djcxy.com/p/37879.html
上一篇: Powershell Get