Как я могу выполнить локальный скрипт с удаленного компьютера с параметрами

Я пытаюсь найти способ запустить скрипт PowerShell, расположенный на моем компьютере, с удаленного компьютера.

Мне нужно иметь возможность очистить очередь печати случайного сетевого принтера с любого компьютера в нашем домене.

У меня есть небольшой скрипт, расположенный на моем компьютере (например, mypc01), и мне нужно иметь возможность выполнить его с другого компьютера (например, somepc01) и передать параметр, например:

$printservername("1prinsrv") & $printername("hp00014")

Проблема: компьютер, с которого мне нужно запустить этот скрипт, не имеет прав администратора (это не проблема, так как я могу использовать запуск как), на компьютере не установлена ​​​​последняя версия PowerShell (большая проблема, поскольку команды я необходимо выполнить, не существует в более старой версии PowerShell)

Скрипт:

 $printername = Read-Host "give the printername in please"
 $servername = Read-Host "give the servername in please"
 Get-PrintJob -ComputerName $servername -PrinterName $printername | ` where         JobStatus -like "Error*","Paused*" | Remove-PrintJob

Может кто-нибудь, пожалуйста, помогите мне найти правильный способ сделать это?


person fil brinza    schedule 15.01.2016    source источник


Ответы (1)


Предполагая, что на вашем компьютере установлена ​​PowerShell версии 3.0 или новее, вы можете использовать Invoke-Command с параметрами -FilePath и -ArgumentList, но сначала вам нужно переписать свой скрипт для поддержки привязки параметров:

param(
    [string]$PrinterName = $(Read-Host "Input printer name"),
    [string]$ServerName = $(Read-Host "Input server name")
)

Get-PrintJob -ComputerName $servername -PrinterName $printername | Where {
  $_.JobStatus -like "Error*" -or $_.JobStatus -like "Paused*" 
} | Remove-PrintJob

Теперь мы можем сделать:

Invoke-Command -ComputerName anypc01 -FilePath C:\ClearPrintQueue.ps1 -ArgumentList "printer123","printerserver01"

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

Invoke-Command -ComputerName mypc {
    C:\ClearPrintQueue.ps1 -PrinterName "printer123"
}
person Mathias R. Jessen    schedule 15.01.2016
comment
Прежде всего спасибо! для вашей помощи мне нужно запустить эту команду с любого компьютера (команда выполнения любого компьютера на моем компьютере). Я пытаюсь немного изменить ее, однако все еще не работает. Invoke-Command -ComputerName pcname01 -FilePath \\pcname01\C$\Temp\pq. ps1 -ArgumentList имя_принтера, имя_сервераУказанный сервер не существует, или имя сервера или принтера недопустимо. Имена не могут содержать символы ',' или '\'. + CategoryInfo: NotSpecified: (MSFT_PrintJob: ROOT/StandardCimv2/MSFT_PrintJob) [Get-PrintJob], CimExcept ion + FullyQualifiedErrorId: HRESULT 0x80070709, Get-PrintJob Есть идеи? - person fil brinza; 15.01.2016
comment
Вам также необходимо указать имя сервера - person Mathias R. Jessen; 15.01.2016
comment
Я жестко закодировал имя сервера для тестов и изменил ваш скрипт на: param([string]$printername = $(Read-Host Input имя принтера)) И я знаю, что имя сервера и принтера правильно Invoke-Command -ComputerName pcname01 -FilePath \\pcname01 \C$\Temp\pq.ps1 -ArgumentListимя принтера - person fil brinza; 15.01.2016
comment
Запуск скрипта на моем компьютере работает безупречно, но не с другого компьютера.... :( - person fil brinza; 15.01.2016
comment
даже если я сделаю все переменные жестко закодированными, я выдам точно такое же сообщение об ошибке, когда я попробую это с удаленного компьютера..... - person fil brinza; 15.01.2016