Я работаю над некоторыми удаленными вещами, и у меня, похоже, проблема с переменными среды на удаленной машине. Код, который я использую для запуска удаленного задания,
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("Desktop") ничего не возвращает. Я пробовал все разные подходы, при этом назначение переменных было заключено в кавычки, такие как $fileName, и встроено в Write-Host и т. д. Все решения работают «локально», но ни одно из них не работает на удаленной машине, но проблема заключается только в рабочем столе. . Мой вариант использования для этой удаленной работы потребует доступа к большому количеству специальных папок пользователя, поэтому я надеюсь, что здесь есть что-то основное, чего мне не хватает. в противном случае, я думаю, я могу просто жестко закодировать все пути с $([Environment]::UserName), встроенным в строку, но не очень элегантно, когда PS предлагает встроенный доступ.
РЕДАКТИРОВАТЬ: Хм, еще один бит, который, кажется, отлично работает локально, но не удаленно, — это Balloon Tips. Это мой пример
[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)