Scheduled Task for PowerShell Script with String Array Parameter

前端 未结 3 769
我在风中等你
我在风中等你 2021-01-19 02:09

I\'ve created a PowerShell script that runs perfectly from the Management Shell. I\'m trying to get it setup to work in a scheduled task in Windows Server 2008 R2 and am uns

相关标签:
3条回答
  • 2021-01-19 02:49

    Another option, when the options get too complex and you're tired of fiddling with quotes, backticks, etc is to use the underused -EncodedCommand parameter on PowerShell.exe e.g.:

    C:\PS> $cmd = "c:\temp\foo.ps1 'D:\Documents\PowerShell Scripts','D:\SomeFolder'"
    C:\PS> $cmd
    c:\temp\foo.ps1 'D:\Documents\PowerShell Scripts','D:\SomeFolder'
    C:\PS> $bytes = [Text.Encoding]::Unicode.GetBytes($cmd)
    C:\PS> $encodedCmd = [Convert]::ToBase64String($bytes)
    C:\PS> $encodedCmd
    YwA6AFwAdABlAG0AcABcAGYAbwBvAC4AcABzADEAIAAnAEQAOgBcAEQAbwBjAHUAbQBlAG4AdABzAFwAUABvAHcAZQByAFMAaABlAGwAbAAgAFMAYwByAGkAcAB0AHMAJwAsACcARAA6AFwAUwBvAG0AZQBGAG8AbABkAGUAcgAnAA==
    C:\PS> powershell.exe -encodedCommand YwA6AFwAdABlAG0AcABcAGYAbwBvAC4AcABzADEAIAAnAEQAOgBcAEQAbwBjAHUAbQBlAG4AdABzAFwAUABvAHcAZQByAFMAaABlAGwAbAAgAFMAYwByAGkAcAB0AHMAJwAsACcARAA6AFwAUwBvAG0AZQBGAG8AbABkAGUAcgAnAA==
    param1[0] is D:\Documents\PowerShell Scripts
    param1[1] is D:\SomeFolder
    

    Admittedly, not something that would be exactly readable/understandable by someone else. :-) You'd have to doc the command in the description of the scheduled task.

    0 讨论(0)
  • 2021-01-19 02:54

    Try using the -Command switch instead of the -File switch, and then use the invocation operator '&'. Here is a link to an example of doing this with scheduled tasks:

    http://blogs.technet.com/b/heyscriptingguy/archive/2011/01/12/schedule-powershell-scripts-that-require-input-values.aspx

    Something like:

    -Command "& 'D:\Documents\PowerShell Scripts\FarmBackup.ps1' '\\SomeServer\Backups' 'Full' 0 'D:\Logs\Backups' 0 'D:\Documents\PowerShell Scripts','D:\SomeFolder'"
    

    I tested this solution by creating a script with the contents:

    param([string[]] $x)
    Write-Host $x.Count
    

    Then called it in the following two ways:

    powershell -File ".\TestScript.ps1" "what1,what2"
    

    with result : 1

    and

    powershell -Command "& .\TestScript.ps1 what1,what2"
    

    with result: 2

    0 讨论(0)
  • 2021-01-19 02:55

    I have been using PowerShell for SharePoint and have created several Scheduled Task to trigger them at various intervals.

    This is how i do it and it worked for me all the time.

    Syntax : [Path to ur script'] -Param1Name 'Value1' -Param2Name 'Value2' -Param3Name 'Value3'

    Here is a real example :

    D:\Scripts\Global.ps1 -DataLocation 'D:\Scripts' -DeploymentParameters 'Deploymentparameters' -Deployments 'Deployments' -GlobalParameters 'GlobalParameters' -SiteUrl 'https://my.sp.company.com'

    0 讨论(0)
提交回复
热议问题