Я работаю над некоторыми удаленными вещами, и у меня, похоже, проблема с переменными окружения на удаленной машине. Код, я использую для запуска удаленной работы являетсяPowershell, удаленная работа и доступ к специальным папкам
Invoke-Command -sessionOption:(New-PSSessionOption -noMachineProfile) -computerName:$machine -argumentList: $filePath –scriptblock {
param (
[String]$filePath
)
& powershell.exe -noProfile -executionpolicy bypass -file $filePath
} -credential:$credential -authentication:CredSSP –asJob -jobName:$machine > $null
и код, который я бегу удалённо
$fileName = "$([Environment]::UserName).log"
$desktop = [Environment]::GetFolderPath("Desktop")
Write-Host "$desktop\$fileName!"
Теперь, как я понимаю, что последний бит кода на самом деле работает на удаленной машине, в контексте учетных данных пользователя в $ credentials. Который, как я ожидал, приведет к возврату полного пути к файлу фиктивного журнала на рабочем столе пользователя. Однако на удаленной машине [Environment] :: UserName работает нормально, но [Environment] :: GetFolderPath («Рабочий стол») ничего не возвращает. Я пробовал все разные подходы, с назначением переменной, заключенным в кавычки, например $ fileName, и встроенным в Write-Host и т. Д. Все решения работают «локально», но ни одна из них не работает на удаленном компьютере, но только рабочий стол является проблемой , Мой прецедент для этого удаленного задания потребует доступа к множеству пользовательских специальных папок, поэтому я надеюсь, что здесь есть что-то основное, чего я не вижу. в противном случае, я думаю, я могу просто скопировать все пути с помощью $ ([Environment] :: UserName), вложенных в строку, но не очень элегантный, когда PS предлагает встроенный доступ.
EDIT: Hrm, еще один бит, который, кажется, работает нормально локально, но не удаленно - это воздушные шары. Поскольку это мой пример
[void[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$path = Get-Process -id $pid | Select-Object -ExpandProperty Path
$balloonTip = New-Object System.Windows.Forms.NotifyIcon
$balloonTip.icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balloonTip.balloonTipIcon = "Info"
$balloonTip.balloonTipText = "Testing, one, two"
$balloonTip.balloonTipTitle = "$([Environment]::UserName)"
$balloonTip.visible = $true
$balloonTip.showBalloonTip(0)
Интересно. Это делает трюк (по крайней мере на пути к рабочему столу), но он противоречит рекомендациям другого потока о том, что вы удаляете работу со стандартным пользователем. при этом удаление, похоже, не вызывает проблем. Что касается Balloon Tips, это просто возможно что-то, что нельзя сделать удаленно? – Gordon