Команда "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'
на локальной машине я запускаю сценарий вместо удаленной машины. Кто-нибудь знает, почему?
Enter-PSSession
обычно используется в интерактивной командной строке. Для удаленных вызовов по сценарию существует два основных шаблона удаленного взаимодействия PowerShell
с Invoke-Command
.
Invoke-Command -ComputerName ... -ScriptBlock {...}
подходит для одноразовых звонков. Обратите внимание на -имя компьютера
. Использование этого шаблона аргументов приводит к увеличению затрат на установку и разрыв соединения и аутентификацию при каждом вызове. Это удобно тем, что вам не нужно ничего помнить о чистке.
Переключение на New-PSSession
, как в исходном вопросе, дает более устойчивое соединение, которое можно использовать снова и снова, указав -Session
вместо ComputerName
. Для хорошей гигиены ресурсов вы захотите удалить сеанс после того, как закончите. Обычно я использую шаблон try / finally
.
В любом случае, затем выполняйте свою работу в ScriptBlock
. Вы можете сделать $, используя: text | Out-Файл c: \ website \ company.txt
внутри блока. Спецификатор области using
позволяет ссылаться на переменные из вызывающего контекста.
извините, это будет немного чушь ответ, но я закончил тем, что отказался от всего этого и начал заново, вместо того, чтобы создавать переменную, а затем переносить ее и т. д. Теперь он создает текстовый файл на локальном компьютере, а затем передает его на сервер через FTP, гораздо более простой способ сделать это. Если вы хотите, чтобы я загрузил код, который я сейчас использую, я буду, но пока не проявлю интерес, оставлю его. Спасибо всем за нашу помощь