用于Windows Server 2003的Powershell调用命令

用于Windows Server 2003的Powershell调用命令,powershell,active-directory,Powershell,Active Directory,我需要使用Powershell脚本在AD计算机对象和本地计算机名称之间进行一些本地服务器名称比较 下面的脚本是我想到的,但不知何故,它没有显示Windows Server 2003“本地计算机名”列的结果 Get-ADComputer -Filter { (operatingSystem -like '*2003*') -or (operatingSystem -like '*2008*') } | Where-Object { Test-Connection -ComputerName

我需要使用Powershell脚本在AD计算机对象和本地计算机名称之间进行一些本地服务器名称比较

下面的脚本是我想到的,但不知何故,它没有显示Windows Server 2003“本地计算机名”列的结果

Get-ADComputer -Filter { (operatingSystem -like '*2003*') -or (operatingSystem -like '*2008*') } |
    Where-Object { Test-Connection -ComputerName $_.Name -Count 1 -Quiet } |
    Select-Object -Property `
        Name,
        @{ N = 'Invoke-Command result'; E = { Invoke-Command -ComputerName $_.Name -Scriptblock { HOSTNAME } } },
        @{ N = 'PsExec (32bit) result'; E = { PsExec.exe "\\$($_.Name)" /accepteula cmd /c "HOSTNAME" 2>&1} },
        @{ N = 'PsExec (64bit) result'; E = { PsExec64.exe "\\$($_.Name)" /accepteula cmd /c "HOSTNAME" 2>&1} } |
    Sort-Object Name |
    Out-GridView
我已经按照下面一些专家的建议将代码更新到上面。 然而,结果现在显示如下:


如果您执行
$env:COMPUTERNAME
[System.Net.Dns]::GetHostName()
而不是
HOSTNAME
,该怎么办?请单独使用psexec进行测试,直到找到答案,然后将工作命令替换为此命令。没什么疯狂的,就这么做吧。这可能只是一个输入错误,你把
Invoke Command
拼错了。显然,PsExec 2.2有一个开关
-nobanner
。另一个选项是只返回字符串数组PsExec输出的第6行。我发现@Theo感谢建议的参数:-)是的,它很有帮助