vbs wrapped ps1 脚本提供了不完整的结果
vbs wrapped ps1 script delivers incomplete results
我创建了一个 .ps1 脚本来监控我们的客户,它非常有效。不幸的是,您在执行它时总是会看到一个 powershell window 弹出,所以我将它包装到一个 .vbs 脚本中,该脚本使用 wscript 执行并每天使用从 GPO 到 运行 的计划任务。当我手动执行脚本时,ps1 文件和 vbs 文件都可以工作,但我无法让它在 GPO 中工作。除映射驱动器外,一切都正常运行。
当我 运行 .ps1 文件时有效的代码片段:
$Network_Drive=(Get-SMBMapping | Select-Object -expand RemotePath) -join "`r`n,"
$Network_Drive | Out-File \a\b\c.csv
也有效:
$Network_Drive= (Get-CimInstance -Class Win32_NetworkConnection | Select -ExpandProperty RemoteName) -join "`r`n,"
vbs 脚本:
command = "powershell.exe -nologo -ExecutionPolicy Unrestricted -File \network\link\to\the\script.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0
预期结果:
,\mapped\drive1\
,\mapped\drive2\
结果:
,
,
我不确定这是否与组策略有关,或者我是否应该使用其他方法。当我不使用 .vbs 而是直接使用 ps1 文件时,一切都按预期工作。网络打印机按预期显示。
第一个问题是:为什么需要VBScript WSH脚本?
如果目标是从 VBScript 脚本获取映射驱动器列表,则无需 shell PowerShell 并执行输出解析。相反,只需在您的 WSH 脚本中直接使用 WshNetwork
对象。示例:
Dim WshNetwork
Set WshNetwork = CreateObject("WScript.Network")
Dim Output
Output = ""
Dim Drives, I
Set Drives = WshNetwork.EnumNetworkDrives()
For I = 0 To Drives.Count - 1 Step 2
If Output = "" Then
Output = Drives.Item(I) & " => " & Drives.Item(I + 1)
Else
Output = Output & vbNewLine & Drives.Item(I) & " => " & Drives.Item(I + 1)
End If
Next
WScript.Echo Output
但再次强调:为什么需要 WSH VBScript 脚本?
我通过将脚本放在客户端而不是共享驱动器上解决了我的问题。
我创建了一个 .ps1 脚本来监控我们的客户,它非常有效。不幸的是,您在执行它时总是会看到一个 powershell window 弹出,所以我将它包装到一个 .vbs 脚本中,该脚本使用 wscript 执行并每天使用从 GPO 到 运行 的计划任务。当我手动执行脚本时,ps1 文件和 vbs 文件都可以工作,但我无法让它在 GPO 中工作。除映射驱动器外,一切都正常运行。
当我 运行 .ps1 文件时有效的代码片段:
$Network_Drive=(Get-SMBMapping | Select-Object -expand RemotePath) -join "`r`n,"
$Network_Drive | Out-File \a\b\c.csv
也有效:
$Network_Drive= (Get-CimInstance -Class Win32_NetworkConnection | Select -ExpandProperty RemoteName) -join "`r`n,"
vbs 脚本:
command = "powershell.exe -nologo -ExecutionPolicy Unrestricted -File \network\link\to\the\script.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0
预期结果:
,\mapped\drive1\
,\mapped\drive2\
结果:
,
,
我不确定这是否与组策略有关,或者我是否应该使用其他方法。当我不使用 .vbs 而是直接使用 ps1 文件时,一切都按预期工作。网络打印机按预期显示。
第一个问题是:为什么需要VBScript WSH脚本?
如果目标是从 VBScript 脚本获取映射驱动器列表,则无需 shell PowerShell 并执行输出解析。相反,只需在您的 WSH 脚本中直接使用 WshNetwork
对象。示例:
Dim WshNetwork
Set WshNetwork = CreateObject("WScript.Network")
Dim Output
Output = ""
Dim Drives, I
Set Drives = WshNetwork.EnumNetworkDrives()
For I = 0 To Drives.Count - 1 Step 2
If Output = "" Then
Output = Drives.Item(I) & " => " & Drives.Item(I + 1)
Else
Output = Output & vbNewLine & Drives.Item(I) & " => " & Drives.Item(I + 1)
End If
Next
WScript.Echo Output
但再次强调:为什么需要 WSH VBScript 脚本?
我通过将脚本放在客户端而不是共享驱动器上解决了我的问题。