Пробовал решить эту проблему немного и, похоже, не понял ее.PowerShell Invoke-Command возвращает пустые данные?
У меня есть следующий сценарий:
$Servers = Get-Content -Path "C:\Utilities_PowerShell\ServerList.txt"
$IISServiceName1 = 'W3SVC'
$IISServiceName2 = 'IISAdmin'
$IISServiceName3 = 'WAS'
$IISarrService = Get-Service -Name $IISServiceName1,$IISServiceName2,$IISServiceName3
$IISarrServiceCheck = Get-Service -Name $IISServiceName1,$IISServiceName2,$IISServiceName3 -ErrorAction SilentlyContinue -ErrorVariable NoService
function IISServiceStatus # Checks for status of IIS services
{
param (
$IISServiceName1,
$IISServiceName2,
$IISServiceName3,
$IISarrService,
$IISarrServiceCheck
)
if (Get-Service -Name $IISServiceName1,$IISServiceName2,$IISServiceName3)
{
Write-Host "Status of IIS service(s) on $env:ComputerName :"
Get-Service -Name $IISServiceName1,$IISServiceName2,$IISServiceName3 | Select Name,DisplayName,Status | Format-Table -AutoSize
}
else
{
Write-Host " No IIS service(s) were found..." -foreground "red"
}
}
$Sessions = New-PSSession -ComputerName $Servers
$EndJobs = $Sessions | ForEach-Object {
Invoke-Command -Session $_ -ScriptBlock ${function:IISServiceStatus} -AsJob -ArgumentList $IISServiceName1, $IISServiceName2, $IISServiceName3, $IISarrService, $IISarrServiceCheck | Wait-Job | Receive-Job
Write-Host " "
}
Всякий раз, когда я запускаю его, все это я получаю выход:
Status of IIS service(s) on *PC* :
Если я запускаю функцию вне цикла/Invoke-Command , результаты абсолютно идеальны. Что случилось с моим удаленным циклом?
Я попытался положить переменные внутри функции, я попытался запустить взывать-команду без списка аргументов, и т.д.
Update: 3/17/16
Оказывается. ..если я запускаю свой фактический скрипт как есть, результат $EndJobs
странный, поскольку он выводит ВСЕ сервисы в одной таблице, а затем три службы IIS в другой таблице. Это объясняет, почему, когда я запускаю скрипт-скрипт invoke-command (stopIIS) ... Мне пришлось перезагрузить весь сервер, потому что он потерял все сервисы.
Эти функции выполняются ИСПОЛЬЗОВАТЬСЯ, если не выполняются с помощью команды remote/invoke.
Что за черт ... invoke-command серьезно закручивает мои вещи!
У кого-нибудь есть идеи/советы о том, как я могу запустить свой локальный скрипт (который работает на 100%) на множестве серверов из текстового файла без каких-либо странных проблем? Является ли invoke-command единственным способом?
Что такое значение $ EndJobs после вызова вашего кода? – PetSerAl
Значение верно, @PetSerAl, если я вывожу '$ EndJobs' после запуска моего кода. Как я уже говорил ниже, у меня есть множество других функций, называемых с использованием одного и того же метода invoke-command, и они работают нормально ... единственное, что не было, это тот. Я не понимаю, почему этот результат не будет выводить, как и все остальные. – Ilya
На самом деле, @PetSerAl, я стою исправлено. Если я запускаю свой фактический скрипт как есть, результат '$ EndJobs' странный, поскольку он выводит ВСЕ сервисы в одной таблице, а затем три службы IIS в другой таблице. Это объясняет, почему, когда я запускаю скрипт invoke-command (stopIIS), мне приходилось перезагружать весь сервер, потому что он потерял все сервисы. Эти функции выполняются ИСПОЛЬЗОВАТЬСЯ, если они не запускаются с помощью команды remote/invoke-command. Что за черт ... invoke-command серьезно прикручивает мои вещи! – Ilya