Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Powershell] Variabelen worden niet uniform opgepakt

Pagina: 1
Acties:

  • Roamor
  • Registratie: Mei 2004
  • Niet online
Ik zit met het probleem dat in mijn script een variabele maar 1x herkend wordt. Het betreft een Windows 7, 64bit met Powershell versie 2.0.

Dit is (een deel van) mijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Variabelen
$remotefilespath = "V:\INSTALL\Toggle"

# Check of Toggle reeds op het systeem staat
if (!(Test-Path $localdirectory))
{
& '$remotefilespath\toggle_setup.exe' /silent /folder=$localdirectory /assoc=1
}

# Plugin check
if (!(Test-Path $localdirectoryplugin))
{
& '$remotefilespath\toggle_pluginssetup.exe' /silent /folder=$localdirectory
}


De eerste aanroep gaat goed, maar zodra ik de plugin wil installeren, dan pakt hem niet meer. Dan krijg ik het bekende:
"The term $remotefilespath is not recognized as the name of a cmdlet, function etc. etc.
Als ik echter de $remotefilespath vervang door het volledige pad, dan gaan beide wel goed. Ik heb ook geprobeert de variabele van een UNC-pad te maken, maar dan heb ik hetzelfde probleem.

Weet iemand waar ik de mist in ga?

Verwijderd

Met
C#:
1
$global:remotefilespath
kan je een globale variabele definiëren. Ik heb overigens geen flauw idee wat het verschil is tussen een met $global gedeclareerde variabele en een variabele die in global scope staat, behalve dat het een aantal van mijn problemen ooit heeft opgelost.

En trouwens, je moet " gebruiken, niet '. Het verschil daartussen is dat hij met " wel de variabele expand, en met een enkele ' niet.

  • Roamor
  • Registratie: Mei 2004
  • Niet online
Verwijderd schreef op woensdag 12 juni 2013 @ 15:20:
Met
C#:
1
$global:remotefilespath
kan je een globale variabele definiëren. Ik heb overigens geen flauw idee wat het verschil is tussen een met $global gedeclareerde variabele en een variabele die in global scope staat, behalve dat het een aantal van mijn problemen ooit heeft opgelost.
Bedankt voor je antwoord. Global had ik geprobeert; vergeten te melden. Loopt op hetzelfde punt vast.
En trouwens, je moet " gebruiken, niet '. Het verschil daartussen is dat hij met " wel de variabele expand, en met een enkele ' niet.
Dat kan niet, anders snapt hij niet dat hij de exe moet uitvoeren. Met dubbele quotes maakt hij er gewoon tekst van namelijk. En omdat ik de parameters mee wil geven, gebruik ik vooraan de &.

Verwijderd

code:
1
2
3
$path = "C:\windows\system32"

& "$path\calc.exe"


Start bij mij gewoon calc.exe.

En anders probeer je:
code:
1
cmd \c "$path\..."

  • Roamor
  • Registratie: Mei 2004
  • Niet online
Zonder aanhalingstekens doet hij het zelfs goed, omdat er geen spaties in het pad zitten:
code:
1
& $remotefilespath\toggle_setup.exe /silent /folder=$localdirectory /assoc=1


Maar alleen dus de eerste keer in het script. Daarna herkend hij de variabele schijnbaar niet meer... Best verwarrend. ;)

Verwijderd

Hoi,

Ik vind het raar dat hij de eerste keer wel werkt, van wat ik in je code zie zou het allebei niet moeten werken.

met een single quote zou een variabele niet geinterpreteerd moeten worden in een string maar echt als tekst geinterpreteerd moeten worden. Je dient in allebei dubbele quotes te gebruiken.

output van de string '$remotefilespath\toggle_pluginssetup.exe' = $remotefilespath\toggle_pluginssetup.exe
output van de string "$remotefilespath\toggle_pluginssetup.exe" = V:\INSTALL\Toggle\toggle_pluginssetup.exe

  • Roamor
  • Registratie: Mei 2004
  • Niet online
Met dank aan bovenstaande reacties. :)

Ik heb het gevonden, zoek de verschillen (de kleurcodering van mijn editor geeft het al aan):
Afbeeldingslocatie: http://tweakers.net/ext/f/QtZ4ABJBMMryMDtOpi43XukU/medium.jpg

De eerste variant pakt hij dus maar 1x keer op. De derde werkt structureel. De laatste snapt hij dus niet als exe.

[ Voor 6% gewijzigd door Roamor op 14-06-2013 11:16 ]

Pagina: 1