Powershell,远程作业和特殊文件夹访问

时间:2015-06-30 16:36:33

标签: powershell special-folders

我正在研究一些远程处理的东西,我似乎在远程机器上遇到了环境变量的问题。我用来启动远程作业的代码是

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)

1 个答案:

答案 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