Powershell script: Hur använda variabel i en sträng?

Permalänk
Medlem

Powershell script: Hur använda variabel i en sträng?

Tja!

Jag skulle vilja snygga till ett powershell script men lyckas inte få till det riktigt.

Jag har en variabel, en sökväg, exempelvis:

$var1 = 'C:\Users\xxx\Documents\.PROJEKT\xxx\TEST\Script\Skapa_fil_på_desktop.ps1'

Mitt script skapar sedan en aktivitet i schemaläggaren som ska exekvera ovanstående script.

......... -Execute 'Powershell.exe' -Argument '-file "HÄR VILL JAG PLACERA MIN VARIABEL"'

Hur får jag in min variabel inuti argumentsträngen?

I C# löser jag oftast detta med att sätta $ framför strängen och sedan måsvingar "Här är en sträng med {min variabel} i".

Tack på förhand

Visa signatur

Asus TUF 3080 Ti | Ryzen 5600X | 16GB DDR4 | B550-i Strix | Corsair SF750 | SSUPD Meshlicious | Kraken X53

Permalänk
Medlem

Detta borde väl funka?

-Execute 'Powershell.exe' -Argument '-file "$var1"'

Om det bökar pga nestade '/"-fnuttar så kan du prova

-Execute 'Powershell.exe' -Argument '-file "$($var1)"'

Permalänk
Medlem

Det du vill göra kallas string interpolation.

PS> "var1: ${var1}."

Permalänk
Medlem
Skrivet av henkiii:

Detta borde väl funka?

-Execute 'Powershell.exe' -Argument '-file "$var1"'

Om det bökar pga nestade '/"-fnuttar så kan du prova

-Execute 'Powershell.exe' -Argument '-file "$($var1)"'

Skrivet av thompa89:

Det du vill göra kallas string interpolation.

PS> "var1: ${var1}."

Tack för era svar! Jag har testat båda sätten men får det inte att lira. Ska ge er lite mer information. Såhär kan koden se ut och då fungerar det. Scriptet skapar en task i task scheduler som jag sedan testar att köra. Det fungerar om jag skriver min sökväg som utan variabel.

$action = New-ScheduledTaskAction -Execute 'Powershell.exe' `
-Argument '-noprofile -executionpolicy unrestricted -noninteractive -windowstyle hidden -file "C:\Users\xxx\Documents\.PROJEKT\xxx\TEST\Script\Skapa_fil_på_desktop.ps1"'

$trigger = New-ScheduledTaskTrigger -Daily -At 9am

Register-ScheduledTask `
-Action $action `
-Trigger $Ttrigger `
-TaskName "Kör xxx" `
-Description "xxx"

Då jag ska göra flera sådana här script, så hade det varit snyggt om jag kunde spara alla sökvägar som variabler högst upp i scriptet. Då kan man enkelt peka om något i framtiden etc. Tror ni detta är möjligt när man gör det lite invecklat som jag gör nu? Script som kör script dvs.

Visa signatur

Asus TUF 3080 Ti | Ryzen 5600X | 16GB DDR4 | B550-i Strix | Corsair SF750 | SSUPD Meshlicious | Kraken X53

Permalänk
Medlem

@Xangeon

Typ såhär då?

$file1 = 'C:\Users\xxx\Documents\.PROJEKT\xxx\TEST\Script\Skapa_fil_på_desktop.ps1' $arg1 = "-noprofile -executionpolicy unrestricted -noninteractive -windowstyle hidden` -file " + '"' + $file1 + '"' $action = New-ScheduledTaskAction -Execute 'Powershell.exe' ` -Argument "$arg1" $trigger = New-ScheduledTaskTrigger -Daily -At 9am Register-ScheduledTask ` -Action $action ` -Trigger $Ttrigger ` -TaskName "Kör xxx" ` -Description "xxx"

Går säkert att göra snyggare.

gick vilse i fluttarnas värld, har redigerat lite
Permalänk
Medlem
Skrivet av henkiii:

@Xangeon

Typ såhär då?

$file1 = 'C:\Users\xxx\Documents\.PROJEKT\xxx\TEST\Script\Skapa_fil_på_desktop.ps1' $arg1 = "-noprofile -executionpolicy unrestricted -noninteractive -windowstyle hidden` -file " + '"' + $file1 + '"' $action = New-ScheduledTaskAction -Execute 'Powershell.exe' ` -Argument "$arg1" $trigger = New-ScheduledTaskTrigger -Daily -At 9am Register-ScheduledTask ` -Action $action ` -Trigger $Ttrigger ` -TaskName "Kör xxx" ` -Description "xxx"

Går säkert att göra snyggare.

Nu har jag suttit och mekat med det igen, och nu funkar det. Att dela upp sökvägen och argumentet på sättet du skrev verkade göra susen. Tack så mycket

Visa signatur

Asus TUF 3080 Ti | Ryzen 5600X | 16GB DDR4 | B550-i Strix | Corsair SF750 | SSUPD Meshlicious | Kraken X53