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