Search code examples
javascripttypescripthashtable

TypeScript - pass hash table as an argument to PowerShell script


In typescript, I'm trying to pass hash table as an argument to PowerShell script I'm calling.

Here is my typescript

let params = new Map();
params.set('Project', 'Testproject')
params.set('Username', 'John')
params.set('Password', 'Doe')

let script: string = path.join(__dirname, 'Test.ps1');
let command: string = `& ${pathToScriptPSString(script)} ${params}`

Test.ps1 script has 3 parameters: Project, Username, and Password.

In PowerShell, this is how I would do.

$paramsPassed = @{
    Test = "hello";
    Boolean = $true;
}


function test {

param(
    [parameter()]
    [string] $Test,
    [parameter()]
    [boolean] $Boolean
)

    Write-Host $Test
    Write-Host $Boolean
}


Test @paramsPassed

In the typescript, I tried these but didn't work.

let command: string = `& ${pathToScriptPSString(script)} ${params}`

let command: string = `& ${pathToScriptPSString(script)} @{params}`

Thank you for your help in advance!


Solution

  • I think you need to convert params to a parameter string for PowerShell like below.

    let params = new Map();
    params.set('Project', 'Testproject')
    params.set('Username', 'John')
    params.set('Password', 'Doe')
    
    function toPowerShellParams(params) {
       let paramsString = ''
       params.forEach((key, value) => paramString += `-${key} ${value} `)
       return paramString
    }
    
    let script: string = path.join(__dirname, 'Test.ps1');
    let command: string = `& ${pathToScriptPSString(script)} ${toPowerShellParams(params)}`