none
Ошибка при использовании переменной из foreach цикла RRS feed

  • Вопрос

  • Добрый день, имеется следующая проблема:

    При использовании команды PS - "(Get-wmiobject -Computername "ИМЯ ПК" win32_computerSystem).Username"

    Результат выдается какой и должен то есть имя пользователя в данный момент залогиненого за этим ПК.

    Если я делаю переменную например:

    $pc = "pc1"

    (Get-wmiobject -Computername $pc win32_computerSystem).Username

    То результат так же нормальный, выдается имя пользователя.

    Но если я делаю следующий скрип (его пример взят из другого топика на форуме):

    $Comp = Get-ADComputer -Filter * | Where-Object { $_.enabled -eq $true } | Select-Object name  | Sort-Object Name

    foreach ($pc in $Comp)

    (Get-wmiobject -Computername $pc.Name win32_computerSystem).Username

    То у меня выдается следующая ошибка:

    Get-wmiobject : Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
    D:\temp\PCUSER.ps1:14 знак:2
    + (Get-wmiobject -Computername $pc win32_computerSystem).Username
    +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
        + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

    Пробовал вместо (Get-wmiobject -Computername $pc.Name win32_computerSystem).Username писать так:

    1. (Get-wmiobject -Computername $pc.Name win32_computerSystem).Username

    2. (Get-wmiobject -Computername "$pc" win32_computerSystem).Username

    3. $ps2 = (Get-wmiobject -Computername $pc win32_computerSystem).Username

    echo $pc2

    Но результат примерно всегда один и тот же, выдается либо ранее описанная ошибка или ошибка синтаксиса.

    Подскажите в чем может быть дело? Что я делаю не так или  что может быть не так настроено в домене?

Ответы

  • Добрый день,

    Проверил ваш скрипт, указанная ошибка появляется только на выключенных компах, проверку можно реализовать сразу в скрипте: 

    $Comp = Get-ADComputer -Filter * | Where-Object { $_.enabled -eq $true } | Select-Object name  | Sort-Object Name
    
    foreach ($pc in $Comp)
    { 
    if (test-connection -ComputerName $pc.name -Quiet -Count 1){
        Write-Host $pc.name   (Get-wmiobject -Computername $pc.Name win32_computerSystem).Username
    }
    }

    • Помечено в качестве ответа Pavel Mashkov 5 июня 2018 г. 7:31

Все ответы

  • Добрый день,

    Проверил ваш скрипт, указанная ошибка появляется только на выключенных компах, проверку можно реализовать сразу в скрипте: 

    $Comp = Get-ADComputer -Filter * | Where-Object { $_.enabled -eq $true } | Select-Object name  | Sort-Object Name
    
    foreach ($pc in $Comp)
    { 
    if (test-connection -ComputerName $pc.name -Quiet -Count 1){
        Write-Host $pc.name   (Get-wmiobject -Computername $pc.Name win32_computerSystem).Username
    }
    }

    • Помечено в качестве ответа Pavel Mashkov 5 июня 2018 г. 7:31
  • Большое спасибо, скрипт стал работать гораздо лучше, но почему то все равно данная ошибка выдается, гораздо реже но есть. Возможно ли, что она выдается из-за ПК которые включены но на них никто не залогинен?
  • Нет, в этом случае он выведет только имя компа без пользователя. Посмотрите по ссылке, возможно поможет.