PowerShell 意外地将 "CN=" 前缀添加到计算机名称
PowerShell unexpectedly adds "CN=" prefix to computer name
我正在尝试遍历计算机列表并检索每台计算机的型号。当我使用 Write-Output 打印出每台计算机的名称时,这正是我所期望的(只是名称)。但是,当我尝试使用 wmic 命令获取模型时,它似乎正在使用 "CN=$name"。即使我执行 .Substring(3),它仍然会抛出错误 "Alias not found" 并显示 "CN=$name"。这是我的脚本:
$computers = Get-ADComputer -Filter '*'
foreach ($computer in $computers) {
Write-Output $computer.Name # Outputs how I expect, just the name
wmic /node:$computer.Name csproduct get name | Write-Output # Throws error, alias not found CN=$name
}
当你这样做时:
wmic /node:$computer.Name csproduct get name
PowerShell 只认为 $computer
是应该扩展的变量。所以它在 $computer
上执行 ToString()
,结果是计算机的完整专有名称(这就是为什么从头开始修剪 CN=
没有帮助)。输出这个就可以看到:
Write-Output "$computer.Name"
您会看到您获得了附加有 .Name
的专有名称。
为避免这种情况,您可以明确地告诉它您希望 $computer.Name
通过用 $( )
:
括起来来解析
wmic /node:$($computer.Name) csproduct get name
如果您愿意,可以在这里阅读更多相关内容:Variable expansion in strings and here-strings
我正在尝试遍历计算机列表并检索每台计算机的型号。当我使用 Write-Output 打印出每台计算机的名称时,这正是我所期望的(只是名称)。但是,当我尝试使用 wmic 命令获取模型时,它似乎正在使用 "CN=$name"。即使我执行 .Substring(3),它仍然会抛出错误 "Alias not found" 并显示 "CN=$name"。这是我的脚本:
$computers = Get-ADComputer -Filter '*'
foreach ($computer in $computers) {
Write-Output $computer.Name # Outputs how I expect, just the name
wmic /node:$computer.Name csproduct get name | Write-Output # Throws error, alias not found CN=$name
}
当你这样做时:
wmic /node:$computer.Name csproduct get name
PowerShell 只认为 $computer
是应该扩展的变量。所以它在 $computer
上执行 ToString()
,结果是计算机的完整专有名称(这就是为什么从头开始修剪 CN=
没有帮助)。输出这个就可以看到:
Write-Output "$computer.Name"
您会看到您获得了附加有 .Name
的专有名称。
为避免这种情况,您可以明确地告诉它您希望 $computer.Name
通过用 $( )
:
wmic /node:$($computer.Name) csproduct get name
如果您愿意,可以在这里阅读更多相关内容:Variable expansion in strings and here-strings