如何在使用不同凭据时列出所有计算机操作系统

时间:2015-08-25 14:18:14

标签: powershell error-handling credentials powershell-v4.0 powershell-ise

我尝试检索计算机名称及其当前操作系统的列表。 一切都运行正常,我在这个特定的服务器上没有访问我的凭据。 解释:要登录服务器,我必须使用另一个帐户。 对于每个用户ist CurrentUserName +“ad”(对于ADministration) servers.txt就像

  

Server1

     

Server2

     

Server3

     

...

让我告诉你两次尝试。

1

$Login = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name +"ad"
$cred = Get-Credential $Login
$servers = get-Content .\server.txt
$OS = Get-WmiObject -class Win32_OperatingSystem -computername $servers -Credential $cred


$OS | Select-Object CSName, Caption, OSArchitecture | Export-CSV -path .\$(get-date -f yyyyMMd)_CurrentOS.csv
$OS | select CSName, Caption, OSArchitecture | Out-GridView -Title 'Current OS'

一切都很好,直到我添加一个我没有登录权限的服务器。 之后我得到以下错误,没有服务器成功。

  

Get-WmiObject:Zugriff verweigert(Ausnahme von HRESULT:0x80070005(E_ACCESSDENIED))

2

$Login = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name +"ad"
$cred = Get-Credential $Login
$servers = get-Content .\server.txt

foreach ($server in $servers)
{

    Try {
     $OS = Get-WmiObject -class Win32_OperatingSystem -computername $server -Credential $cred -ea SilentlyContinue
    } Catch {
    Write-Host 'Logon Credentials not accepted. No access to'$Server'.' -fore white -back red
    } Finally {
     Write-Host 'Logon Credentials accepted. Grant access to'$Server'.'
    }
}
$OS | Select-Object CSName, Caption, OSArchitecture | Export-CSV -path .\$(get-date -f yyyyMMd)_CurrentOS.csv
$OS | select CSName, Caption, OSArchitecture | Out-GridView -Title 'Current OS'

屏幕上的输出很好,除了“Out-GridView”这里只是GridView中显示的最后一个服务器。

  

已接受登录凭据。授予访问DEBZIAPP104的权限。

添加这个“坏服务器”时我会得到

  

已接受登录凭据。授予访问DEBZIAPP104的权限。

     

不接受登录凭据。无法访问DEBZIAPP106。

     

已接受登录凭据。授予访问DEBZIAPP106的权限。

我想列出所有正常的服务器。如果出现我没有登录权限的服务器,则应显示一条消息,并且脚本需要继续。

请询问是否有任何不清楚的地方。 希望有人能提供帮助。 :)

电贺, 帕特里克

1 个答案:

答案 0 :(得分:0)

Try / Catch只能捕获终止错误。

这应该让你直截了当:

$OS = Get-WmiObject -class Win32_OperatingSystem -computername $server -Credential $cred -ea Stop