jak spustit v PowerShell skript, který má v cestě mezeru

Já se teda snažím vždycky vyhnout v názvech souborů a adresářů mezerám, ale kolega jmenovec to tu řešil a někdy se prostě může hodit jak na to…

Co chtěl udělat? Spustit skript přes Invoke-Expression v plné cestě. Takže třeba něco jako:

Invoke-Expression 'C:\users\Jan\Desktop\test script.ps1'

Tohle vám ale cestu nepobere…

C:\users\Jan\Desktop\test : The term 'C:\users\Jan\Desktop\test' is not recognized as the name of a cmdlet,...

Jak to teda udělat? Stačí přihodit magický znak „&„.

S proměnnou by to vypadalo takto:

$file = & 'C:\users\Jan\Desktop\test script.ps1'
Invoke-Expression $file

Bez proměnné, tedy napřímo do cmdletu, takto:

Invoke-Expression $(& 'C:\users\Jan\Desktop\test script.ps1')

Ještě jde použít escape znak „`“ před mezeru, což ručně se dá udělat třeba takhle:

Invoke-Expression 'C:\users\Jan\Desktop\test` script.ps1'

Vkládat to ale vždycky růčo do cesty je nuda a tak ještě možnost, jak automaticky nahrazovat takto:

Invoke-Expression $('C:\users\Jan\Desktop\test script.ps1'.replace(' ','` '))

That’s it!

Written on August 13, 2015