Выполнение файла EXE с использованием скрипта PowerShell с аргументами для GCDS
Я новичок в Windows и PowerShell на уровне администратора. У меня есть опыт работы с Linux, и я предпочитаю использовать Python, но мне сложно понимать среду Windows. В bash и Linux я привык запускать сценарии оболочки с помощью cronjobs, но в Windows у меня проблема с запуском этой команды в планировщике задач. Мне нужно иметь возможность запускать Google Cloud Directory Sync, чтобы наша AD синхронизировалась с Gsuite. Я написал командный файл, который работает, но я чувствую его немного устаревшим, чтобы использовать файл bat
cd C:\Program Files\Google Apps Directory Sync\
sync-cmd.exe -a -o -c config.xml
я думаю, что это нужно запускать как скрипт PowerShell через планировщик задач, но я не знаю с чего начать. Я нашел это до сих пор, но я получаю ошибку, которую я не знаю, как интерпретировать.
Start-Process sync-cmd.exe -ArguementList "-a -o -c C:\Somepath\config.xml"
извините за то, что я новичок, спасибо заранее! Также для дополнительного ресурса есть страница команд GCDS.
3 ответа
Вариант 1. Запланируйте свой EXE напрямую через планировщик задач
Нет необходимости в PowerShell. Вы можете просто указать полный путь к EXE и аргументы, используя пользовательский интерфейс планировщика заданий Windows. Вы можете указать рабочую папку, используя опцию Start in.
Вариант 2. Планирование сценария PowerShell с помощью планировщика задач
Я считаю использование опции -File в PowerShell.exe очень полезным при планировании сценария PowerShell с помощью планировщика заданий. В этом случае я бы использовал командлет Start-Process и инкапсулировал аргументы в скрипте PowerShell.
пример
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -File "c:\MyScript.ps1"
MSDN
Синтаксис
PowerShell[.exe]
[-Command { - | <script-block> [-args <arg-array>]
| <string> [<CommandParameters>] } ]
[-EncodedCommand <Base64EncodedCommand>]
[-ExecutionPolicy <ExecutionPolicy>]
[-File <FilePath> [<Args>]]
[-InputFormat {Text | XML}]
[-Mta]
[-NoExit]
[-NoLogo]
[-NonInteractive]
[-NoProfile]
[-OutputFormat {Text | XML}]
[-PSConsoleFile <FilePath> | -Version <PowerShell version>]
[-Sta]
[-WindowStyle <style>]
PowerShell[.exe] -Help | -? | /?
Пример с моего ноутбука
Передача аргументов через Start-Process
Если вы используете Start-Process, вы можете передать массив аргументов через строку с разделителями-запятыми.
PS C:\> Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%systemdrive%\program files`""
Ваша ошибка указывает на то, что Start-Process
не имеет параметра с именем ArguementList
, Ты можешь использовать Get-Help
чтобы получить список доступных параметров.
Get-Help Start-Process -Parameter * | Select-Object Name
В самом деле ArguementList
недоступен, но ArgumentList
доступен. В вашей команде просто опечатка.
Следующее должно работать просто отлично:
Start-Process sync-cmd.exe -ArgumentList "-a -o -c C:\Somepath\config.xml"
Я обнаружил, что PowerShell очень похож на python и bash с переменными. Это работает как скрипт, который я затем присоединяю к планировщику задач.
$msbuild = "C:\Program Files\Google Apps Directory Sync\sync-cmd.exe"
$arguements = "-a -o -c config.xml"
start-Process -FilePath $msbuild $arguements