#powershell #vbscript #gpo
#powershell #vbscript #объект групповой политики
Вопрос:
я создал скрипт .ps1 для мониторинга наших клиентов, и он работает как по маслу. К сожалению, при его выполнении всегда появляется окно powershell, поэтому я включил его в скрипт .vbs, который выполняется с помощью wscript и использует запланированные задачи из объекта групповой политики для ежедневного запуска. И файл ps1, и файл vbs работают, когда я вручную выполняю сценарии, но я не могу заставить его работать в объекте групповой политики. Все работает так, как должно, за исключением подключенных дисков.
вырезан код, который работает при запуске файла .ps1:
$Network_Drive=(Get-SMBMapping | Select-Object -expand RemotePath) -join "`r`n,"
$Network_Drive | Out-File \abc.csv
также работает:
$Network_Drive= (Get-CimInstance -Class Win32_NetworkConnection | Select -ExpandProperty RemoteName) -join "`r`n,"
сценарий vbs:
command = "powershell.exe -nologo -ExecutionPolicy Unrestricted -File \networklinktothescript.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0
Ожидаемый результат:
,\mappeddrive1
,\mappeddrive2
Результат:
,
,
Я не уверен, связано ли это с разрешением групповой политики или мне следует использовать другой метод. Все работает, как ожидалось, когда я использую не .vbs, а файл ps1 напрямую. Сетевой принтер отображается, как ожидалось.
Комментарии:
1. Где ваш скрипт vbs выдает выходные данные?
Ответ №1:
Первый вопрос: зачем вам нужен скрипт VBScript WSH?
Если цель состоит в том, чтобы получить список подключенных дисков из сценария VBScript, нет необходимости запускать PowerShell и выполнять синтаксический анализ выходных данных. Вместо этого просто используйте WshNetwork
объект непосредственно в вашем сценарии WSH. Пример:
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) amp; " => " amp; Drives.Item(I 1)
Else
Output = Output amp; vbNewLine amp; Drives.Item(I) amp; " => " amp; Drives.Item(I 1)
End If
Next
WScript.Echo Output
Но опять же: зачем вам нужен скрипт WSH VBScript?
Комментарии:
1. Часть .ps1 — это лишь небольшой фрагмент сценария powershell, который я запускаю, но это была единственная часть, которая не работала, поэтому я подумал, что остальной код не имеет большого значения. Я завернул скрипт .ps1 в скрипт VBScript, потому что скрипт powershell всегда появлялся на секунду или около того, и я хотел предотвратить это. Тем временем я решил проблему.
Ответ №2:
Я решил свой вопрос, разместив сценарии на клиенте, а не на общем диске.