我正在研究一些远程处理的东西,我似乎在远程机器上遇到了环境变量的问题。我用来启动远程作业的代码是
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)
答案 0 :(得分:0)
请勿使用-NoMachineProfile
:
-NoMachineProfile <SwitchParameter>
Prevents loading the user's Windows user profile. As a result,
the session might be created faster, but user-specific registry
settings, items such as environment variables, and certificates
are not available in the session.
您的命令不在交互式用户会话中运行(尝试[Environment]::UserInteractive
),因此命令无法通过显示对话框窗口或气球提示与会话进行交互。如果要以交互方式执行某些命令,则可以使用任务调度程序:
Register-ScheduledTask -TaskName NotepadTask `
-Action (New-ScheduledTaskAction -Execute Notepad) `
-Principal (New-ScheduledTaskPrincipal -UserId TestUser -LogonType Interactive)
Start-ScheduledTask -TaskName NotepadTask