Enter-PSSession в сценарии не делает ' Я делаю то, что я ожидаю - он выполняется на локальной машине вместо удаленной

Команда "CD" в сценарии ниже выполняется на локальной машине, а не на удаленной. Что не так?

Add-PSSnapin Windows.ServerBackup -ErrorAction SilentlyContinue
set-item wsman:\localhost\Client\TrustedHosts -value 81.xxx.xx.xx
$WBResult = $WBSummary.LastBackupResultHR
$WBErrorMsg = $WBJob.ErrorDescription + "`n" + $WBSummary.DetailedMessage
$User = "administrator"
$File = "C:\Users\jsapsford\Desktop\Password.txt"
$cred = New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $User, (Get-Content $File | ConvertTo-SecureString)

If ($WBResult -eq 0) { $WBResult = "Successful"}
Else {$WBResult = "Failed"}

if ($WBResult -eq "Succesful") {$text = 'document.write("Succesful");'}
Else {$text = 'document.write("Failed");'}

$serverconnection = New-PSSession -ComputerName 81.xxx.xx.xx -Credential $cred
Enter-PSSession -Session $serverconnection

cd C:\website\                                      
$text | Out-File 'company.txt'

В основном я пытаюсь подключиться к серверу с помощью удаленной оболочки PowerShell, затем он должен записать cd на веб-сайт C: \ и создать файл с именем company.txt, но что происходит, так это то, что он выполняет cd C: \ website и $ text | Out-File 'company.txt' на локальной машине я запускаю сценарий вместо удаленной машины. Кто-нибудь знает, почему?

0
задан 12 February 2017 в 14:07
2 ответа

Enter-PSSession обычно используется в интерактивной командной строке. Для удаленных вызовов по сценарию существует два основных шаблона удаленного взаимодействия PowerShell с Invoke-Command .

Invoke-Command -ComputerName ... -ScriptBlock {...} подходит для одноразовых звонков. Обратите внимание на -имя компьютера . Использование этого шаблона аргументов приводит к увеличению затрат на установку и разрыв соединения и аутентификацию при каждом вызове. Это удобно тем, что вам не нужно ничего помнить о чистке.

Переключение на New-PSSession , как в исходном вопросе, дает более устойчивое соединение, которое можно использовать снова и снова, указав -Session вместо ComputerName . Для хорошей гигиены ресурсов вы захотите удалить сеанс после того, как закончите. Обычно я использую шаблон try / finally .

В любом случае, затем выполняйте свою работу в ScriptBlock . Вы можете сделать $, используя: text | Out-Файл c: \ website \ company.txt внутри блока. Спецификатор области using позволяет ссылаться на переменные из вызывающего контекста.

1
ответ дан 4 December 2019 в 16:21

извините, это будет немного чушь ответ, но я закончил тем, что отказался от всего этого и начал заново, вместо того, чтобы создавать переменную, а затем переносить ее и т. д. Теперь он создает текстовый файл на локальном компьютере, а затем передает его на сервер через FTP, гораздо более простой способ сделать это. Если вы хотите, чтобы я загрузил код, который я сейчас использую, я буду, но пока не проявлю интерес, оставлю его. Спасибо всем за нашу помощь

0
ответ дан 4 December 2019 в 16:21

Теги

Похожие вопросы