Как запустить bat-файл на удаленном сервере только после того, как на сервере будет сформирована сессия - PullRequest
0 голосов
/ 27 мая 2020
Write-Host "Welcome to Application Process Start/Stop Dashboard" -ForegroundColor Green
Write-Host "`n" "1) Stop" "`n" "2) Start"
[int]$resp = Read-Host "Choose option 1 or 2 for stopping or starting application process respectively"
if($resp -eq 1)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$result = [System.Windows.Forms.MessageBox]::Show('Are you sure you want to STOP ?', "Info" , 4 )
if ($result -eq 'Yes') 
{
$user = "NAmarshmellow"
$server = "Desktop_10U"
$storesess = New-PSSession -ComputerName $server -Credential $user 
Enter-PSSession -Session $storesess
$path = "\\Users\mellow\Documents\Proj"
$pwd = Read-Host -AsSecureString
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd)
$value = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
NET USE $path /user:$user $value
Start-Process cmd -ArgumentList "/C C:\Users\Desktop_10U\Documents\Some\Stop.bat" -Wait
Clear-Variable storesess
Exit-PSSession
}
}

Я хочу запустить файл bat, в котором есть несколько команд, останавливающих конкретный c процесс приложения. Чтобы остановить этот процесс приложения, есть определенные команды c, которые требуют запуска cmd-файла на сетевом диске. Итак, я написал код, который будет формировать PSSession, и только после того, как PSSession будет сформирован, должна выполняться команда NET USE. Если я сначала формирую сеанс PSSession, а затем запускаю команду вручную, запускаю команду NET USE, тогда она работает нормально. Но когда я запускаю код в целом, он не работает нормально, он выдает ошибку ниже.

NET : System error 1219 has occurred.
At line:18 char:1
+ NET USE $path /user:$user $value
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (System error 1219 has occurred.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared 
resource and try again.

1 Ответ

0 голосов
/ 28 мая 2020

Проблема в том, что Enter-PSSession работает только через интерактивное приглашение. ака. Вы вводите команды в командной строке. Сценарий / запуск всего вместе - это не интерактивный (т.е. вы не можете начинать вводить команды в середине выполняющегося скрипта).

Обходной способ - использовать Invoke -Command и поместите все, что вы хотите выполнить, в блок скрипта. Таким образом можно выполнять неинтерактивные команды. например:

....

$user = "NAmarshmellow"
$server = "Desktop_10U"
$path = "\\Users\mellow\Documents\Proj"
$pwd = Read-Host -AsSecureString
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd)
$value = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)

$script = {
    $user = $Using:user
    $path = $Using:path
    $value = $Using:value

    NET USE $path /user:$user $value
    Start-Process cmd -ArgumentList "/C C:\Users\Desktop_10U\Documents\Some\Stop.bat" -Wait
}

Invoke-Command -ComputerName $server -Credential $user -ScriptBlock $script

....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...