【发布时间】:2015-06-30 16:36:33
【问题描述】:
我正在处理一些远程处理问题,但我似乎对远程计算机上的环境变量有疑问。我用来启动远程作业的代码是
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 提供内置访问时,它就不是很优雅了。
编辑:Hrm,另一个在本地似乎可以正常工作但不能在远程工作的位是 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)
【问题讨论】:
标签: powershell special-folders