使用带有GCDS参数的PowerShell脚本执行EXE文件

时间:2019-02-26 17:49:38

标签: windows powershell gsuite

我是管理员级别的Windows和PowerShell的新手。我有Linux经验,并且喜欢使用Python,但是我很难理解Windows环境。在bash和Linux中,我习惯于使用cronjobs运行shell脚本,但是在Windows中,在Task Scheduler中运行此命令时遇到了问题。我需要能够运行Google Cloud Directory Sync,以便我们的AD与Gsuite同步。我写了一个可以运行的批处理文件,但我觉得使用蝙蝠文件有点过时了

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 个答案:

答案 0 :(得分:2)

选项1-通过任务计划程序直接计划EXE

无需Powershell。您可以使用Windows Task Scheduler用户界面提供EXE和参数的完整路径。您可以使用开始于选项指定工作文件夹。

选项2-使用“任务计划程序”计划PowerShell脚本

在使用Task Scheduler计划PowerShell脚本时,我发现使用 PowerShell.exe -文件选项非常有用。在这种情况下,我将使用cmdlet 开始过程,并将参数封装在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 | -? | /?

笔记本电脑上的示例

enter image description here

通过启动过程传递参数

如果使用的是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

答案 1 :(得分:1)

您的错误表明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"

答案 2 :(得分:0)

我发现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