Выполнение файла 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.

https://support.google.com/a/answer/6152425?hl=en

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

https://docs.microsoft.com/en-us/powershell/scripting/components/console/powershell.exe-command-line-help?view=powershell-6

Синтаксис

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`""

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6

Ваша ошибка указывает на то, что 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
Другие вопросы по тегам