如何从VBS登录脚本调用Powershell Copy-Script

时间:2016-03-16 12:52:30

标签: powershell vbscript

我目前正在将登录脚本从VBS转换为Powershell,并且如果某个特定文件是旧版本,则其中一个更新已减少到:

sub UrgentSupportApp()
    On Error Resume Next

    Set objShell = CreateObject("WScript.Shell")
    objShell.Run "powershell -file ""\\DC1\NETLOGON\PSSubs\UrgentSupportApp.ps1""", 0, true

    If Err <> 0 Then
        strMessage = "ERROR: Sub - UrgentSupportApp"
        DisplayCustomError(strMessage)
    End If
End Sub

但是当我登录时,我看到了这个错误:

  

数字(十进制): - 214703565

     

数字(十六进制):&amp; H80020009

     

描述:无法等待进程。

     

来源:WshShell.Run

我知道powershell工作正常,因为我已将其作为独立脚本进行测试。但是,我不确定通过网络访问它是否会影响env:USERPROFILE变量(用户在此范围内?)。

我尝试将bWaitOnReturn参数更改为false,这导致没有错误,但脚本实际上并没有完成工作。

有没有人有关于如何调试此错误或可能出错的提示?

ps1脚本如下所示:

$appsource = '\\file\Administration\Unused\Apps\IT Support App\IT Self Help.exe'
$apptarget = $env:USERPROFILE + '\desktop\IT Self Help.exe'

$oldapp1 = $env:USERPROFILE + '\desktop\Urgent IT Help Request.exe'
$oldapp2 = $env:USERPROFILE + '\desktop\IT Help Request.exe'

$currentversion = (Get-Command $appsource).FileVersionInfo.FileVersion

If (Test-Path $oldapp1) {Remove-Item $oldapp1}
If (Test-Path $oldapp2) {Remove-Item $oldapp2}

If (Test-Path $apptarget) {
    If (!((Get-Command $apptarget).FileVersionInfo.FileVersion -eq $currentversion)) {
        Copy-Item $appsource $env:USERPROFILE'\desktop' -Force
    }
}
Else {Copy-Item $appsource $env:USERPROFILE'\desktop' -Force}

它只删除任何具有旧名称的文件,然后如果它不存在则复制最新版本。

1 个答案:

答案 0 :(得分:0)

我可以通过将VBS调用更改为:

来解决此问题

objShell.Run("powershell.exe -noexit \\DC1\NETLOGON\PSSubs\UrgentSupportApp.ps1"), 0

我不确定为什么会这样,但确实如此。

请注意,当用户登录计算机时,会通过登录脚本在瘦客户端上调用此方法。