2013-10-17 20 views
0

我的PowerShell脚本确定远程Windows 7计算机,将输出昨天下午我能够访问WMI,今天早上我无法访问WMI,反之亦然

userId=DOMAIN\username 

的当前用户如果没有用户当前登录,该脚本将输出

userId=No One Currently Logged In 

如果脚本无法访问远程计算机的WMI,脚本将输出

userId=CannotConnectToWMI 

我运行脚本以及运行WBEMTEST以确认是否可以在远程计算机上访问WMI。

我真的很困惑,因为昨天下午,我能够在几台远程机器上访问WMI,今天早上我不能。以下是图表:

Results of Script and WBEMTEST

这究竟是为什么? 如何确保WMI始终可用?昨天我给另一个问题有关WMI,https://stackoverflow.com/questions/19409747/wbemtest-to-windows-7-says-the-rpc-server-is-unavailable

请帮

@vonPryz

该脚本试连接。下面是整个脚本

$line_array = @() 
$multi_array = @() 
[hashtable]$my_hash = @{} 
$Sender_IP = $NULL 
$bios = $NULL 
$wmi = $NULL 

foreach ($i in $args){ 
    $line_array+= $i.split(" ") 
} 

foreach ($j in $line_array){ 
    $multi_array += ,@($j.split("=")) 
} 

foreach ($k in $multi_array){ 
    $my_hash.add($k[0],$k[1]) 
} 


$Sender_IP = $my_hash.Get_Item("sender-ip") 

try{ 
    Test-Connection $Sender_IP -count 1 -ErrorAction Stop | out-null 
} 
catch [Exception] 
{ 
    $userId = "userId=CannotPing" 
    return $userId 
} 

try{ 
    $wmi = gwmi -class win32_computerSystem -computer $Sender_IP -ErrorAction Stop 
} 
catch [Exception]{ 
    $userId = "userId=CannotConnectToWMI" 
    return $userId 
} 

try{ 

    $userId = ($wmi).username 
} 
catch [Exception]{ 
    $userId = "userId=CannotFindLastUserLoggedOn" 
    return $userId 
} 


if ($userId -ne $NULL){ 
    $userID = "userId="+$userId 
    return $userId 
} 
elseif ($userID -eq $NULL) 
{ 
    $userId = "userId=No One Currently Logged In" 
    return $userId 
} 

编辑

我被远程处理到这些计算机以检查DCOM权限,然后我意识到,他们中的一个变成了Windows XP中。看来,IP地址正在切换到不同的计算机。我将根据完全合格的域名进行比较。

+0

呃,网络不可靠?电脑发臭?火星与木星一致?蜘蛛正在下载热太监的照片? – Will

+0

组策略是否与这些机器上的DCOM权限混淆? – mjolinor

+0

这些远程机器是否在线?上电了?你看过他们,看看昨天以来发生了什么变化? – alroc

回答

0

Test-Connection添加到您的脚本中,并且只有在ping主机成功时才尝试WMI。

+0

脚本已读有Test-Connection。我刚刚在第一篇文章中发布了原创剧本。 – Glowie

0

我目前正在测试几个IP地址是Windows 7.当我远程进入一个麻烦的IP地址时,我注意到它变成了Windows XP。然后我意识到计算机的IP地址每隔几天就会更改一次,因此10.10.10.10有一天可能属于ComputerA.contoso.com,几天之后可能属于ComputerB.contoso.com。

现在在我对一堆计算机进行任何测试之前,我会根据其完全限定的域名进行测试,然后在执行任何测试之前找到相应的IP地址。