Запрос Powershell работает в приглашении, но не в сценарии

Я пытаюсь создать скрипт, который вводит имя хоста и сообщает мне текущего пользователя, вошедшего в систему. Он работает, когда я запускаю команду одну за другой в приглашении powershell (как администратор), но не дает ожидаемого результата, когда я запускаю сам скрипт.

Вот соответствующий код:

$Row.Hostname = $Hostname
$getwmiobject = Get-WmiObject -class Win32_computersystem -computername $Hostname
$Username = $Getwmiobject.username

    if($UserName -eq $NULL) {
    $Row.Username = "No Current Logged on User"
    }
        else {$Row.Username = $Username
    }

$csvfile += $Row

$csvfile |sort-object Hostname | Export-Csv "foo.csv

При запуске в командной строке я получаю правильного пользователя. При запуске в качестве сценария я получаю «Нет текущего пользователя, вошедшего в систему». Я понятия не имею, почему это происходит.

РЕДАКТИРОВАТЬ: я полагаю, важно упомянуть, что у меня есть запись вывода в файл, внесенные изменения в приведенный выше код.


person user2055535    schedule 08.02.2013    source источник
comment
Пожалуйста, предоставьте полный сценарий, по крайней мере часть param(), и код вашего примера. Образец идентичен сценарию, или вы скопировали/вставили его из нескольких мест, чтобы дать нам образец (может быть проблема с переменной областью действия). Наконец-то вы скрипт в консоли с админскими правами делали?   -  person Frode F.    schedule 09.02.2013
comment
Извините, теперь я понимаю яснее. Это отрывок из конца сценария. Единственное, что я не включил, так это то, как он получил переменную $Hostname, но это действительно не должно иметь значения.   -  person user2055535    schedule 09.02.2013
comment
хорошо. Можете ли вы вставить Write-Host "Hostname is: $Hostname"; Write-Host "Hostname is of type: $($Hostname.gettype().name) перед частью get-wmiobject... и посмотреть, выводит ли он допустимое имя хоста и строку в качестве типа? :)   -  person Frode F.    schedule 09.02.2013
comment
Все имена хостов, которые он извлекает, выводятся как допустимые и в виде строк. У меня есть проверка, которая просто говорит "No Hostname to lookup user", если длина $hostnames также меньше 1.   -  person user2055535    schedule 09.02.2013
comment
что с правами? вы тоже запускали скрипт от имени администратора?   -  person Frode F.    schedule 09.02.2013
comment
Да, и скрипт и построчно запускались от имени админа   -  person user2055535    schedule 09.02.2013
comment
вы запускаете сценарий из сеанса терминального сервера? В сеансе служб терминалов UserName возвращает имя пользователя, вошедшего в консоль, а не пользователя, вошедшего в систему во время сеанса службы терминалов.   -  person Loïc MICHEL    schedule 09.02.2013
comment
Верно, но запрошенные компьютеры на самом деле вошли в консоль. Сценарий запускается в сеансе службы терминалов, но это не объясняет, почему он работает, когда выполняется построчно, а не по сценарию.   -  person user2055535    schedule 11.02.2013
comment
Итак, по-видимому, когда я запускаю скрипт, он возвращается с "Get-WmiObject : The RPC server is unavailable. При запуске построчно я не получаю эту проблему и возвращаю правильную информацию.   -  person user2055535    schedule 11.02.2013
comment
Вы уверены, что используете сеанс консоли (mstsc.exe/admin)?   -  person Loïc MICHEL    schedule 11.02.2013


Ответы (1)


Проверьте любой ввод, который у вас есть для переменной $Hostname, на наличие дополнительных символов, таких как новая строка `n. Когда вы набираете его, он может не выдавать ошибку и работать, потому что ему не нужно обрабатывать такие вещи.

person Ondaje    schedule 11.02.2013
comment
Вот оно. В конце каждого имени хоста был `n, чтобы он мог добавить новый в массив. Вынул эту линию и все заработало. Спасибо! - person user2055535; 11.02.2013