Ваша $cred1
переменная не существует, она должна быть $remotecred
:
Start-Process $script -Credential $remotecred
Имя переменной $pwd
зарезервировано для «рабочего каталога печати».
Это можно увидеть запустив новую консоль PowerShell и запросив ее, вы получите значение для текущего рабочего каталога:
PS C:\WINDOWS\system32> $pwd
Path
----
C:\WINDOWS\system32
Вместо этого используйте что-то другое, например $pass
.
Я бы также позвонил CMD
и передал ваш пакетный файл, используя /c
( ссылка на документацию ):
Start-Process CMD -ArgumentList "/c $script" -Credential $remotecred
Реализация всего этого на практике:
$computername = Read-Host "Enter Hostname"
$user = "mydomain\administrator"
$pass = Read-Host "Enter Password" -AsSecureString
$cred = New-Object System.Management.Automation.PSCredential ($user, $pass)
Invoke-Command -ComputerName $computername -Credential $cred -ScriptBlock {
$remoteuser = "mydomain\administrator"
$remotepwd = Read-Host "Enter Password" -AsSecureString
$remotecred = New-Object System.Management.Automation.PSCredential ("$remoteuser", $remotepwd)
$script = "\\path_to_script\script.bat"
Start-Process CMD -ArgumentList "/c $script" -Credential $remotecred
}
Если вы фактически используете те же учетные данные для удаленного сеанса, что и для запуска командного файла, тогда вам не нужен второй набор учетных данных.
Поскольку удаленный сеанс работает как mydomain\administrator
, все процессы, которые он запускает, также будут запускаться от имени этого пользователя:
$computername = Read-Host "Enter Hostname"
$user = "mydomain\administrator"
$pass = Read-Host "Enter Password" -AsSecureString
$cred = New-Object System.Management.Automation.PSCredential ($user, $pass)
Invoke-Command -ComputerName $computername -ScriptBlock {
$script = "\\path_to_script\script.bat"
Start-Process CMD -ArgumentList "/c $script"
}