PowerShell / Crescendo

a module for wrapping native applications in a PowerShell function and module
MIT License
397 stars 37 forks source link

Add a way to specify a value for $PSNativeCommandArgumentPassing #210

Open sdwheeler opened 4 months ago

sdwheeler commented 4 months ago

Summary of the new feature / enhancement

Take for example the Windows native command vaultcmd.exe. That command has parameters that take values that require quotes. When $PSNativeCommandArgumentPassing = 'Windows' (which is the default) the command fails. When set to Legacy it works.

Example

vaultcmd /listcreds:"windows credentials"

Output

Credentials in vault: windows credentials

Credential schema: Windows Domain Password Credential
Resource: Domain:target=mydomain
Identity: COMPUTER\admin
Hidden: No
Roaming: No
Property (schema element id,value): (100,3)
Property (schema element id,value): (101,SspiPfc)

Credential schema: Windows Domain Password Credential
Resource: Domain:target=myotherpc
Identity: liveaccount@live.com
Hidden: No
Roaming: No
Property (schema element id,value): (100,3)
Property (schema element id,value): (101,SspiPfc)
$cmd = 'vaultcmd'
$arg = '/listcreds:"windows credentials"'
& $cmd $arg

Output

Invalid vault: Element not found.

When you switch to Legacy mode, the command invocation works.

$PSNativeCommandArgumentPassing = 'Legacy'
& $cmd $arg

Output

Credentials in vault: windows credentials

Credential schema: Windows Domain Password Credential
Resource: Domain:target=mydomain
Identity: COMPUTER\admin
Hidden: No
Roaming: No
Property (schema element id,value): (100,3)
Property (schema element id,value): (101,SspiPfc)

Credential schema: Windows Domain Password Credential
Resource: Domain:target=myotherpc
Identity: liveaccount@live.com
Hidden: No
Roaming: No
Property (schema element id,value): (100,3)
Property (schema element id,value): (101,SspiPfc)

Proposed technical implementation details (optional)

Add a property that allows you to set the value of $PSNativeCommandArgumentPassing.

Add the assignment to the begin block of the cmdlet function generated.