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

下一篇: Powershell pipe and command line arguments