[Powershell]Doorgeven van quotes in een externe aanroep

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 13-09 19:26

BlackBurn

One Ring To Rule Them All

Topicstarter
Ik ben bezig met een Powershell script om gemakkelijk netwerk-apparaten te kunnen toevoegen aan Cacti. Het meeste heb ik werkend, echter het aanmaken van een nieuwe node(header) binnen een tree, gaat fout als deze spaties bevat. Nu dacht ik dit simpelweg op te lossen door wat extra quotes toe te voegen, maar helaas zonder resultaat.

Dit is de opdracht die uitgevoerd zou moeten worden, de exacte syntax, zoals deze onder Linux werkt:
code:
1
php add_tree.php --type=node --node-type=header --tree-id=5 --name="new item"


Dit is mijn powershell testcode:
PowerShell:
1
2
3
4
5
6
7
8
9
10
$plinkLocation = "G:\Powershell\plink.exe"
$cacServer = "server01"
$cacServerUser = "cactiuser"
$cacServerPass = "cactipass"
$cacCLI = "/usr/share/cacti/cli"

$command = "&$plinkLocation $cacServer -l $cacServerUser -pw $cacServerPass "
$command += "php $cacCLI/add_tree.php --type=node --node-type=header --tree-id=3 --name=""raak me"""        
Write-Host $command
Invoke-Expression -Command $command


In de output van Write-Host ziet het commando er perfect uit, echter krijg ik de volgende error:
code:
1
ERROR: Invalid Argument: (me)


Het bovenstaande werkt overigens wel perfect als er geen spaties in de naam zitten en ik geen extra quotes gebruik.

Ik heb van alles geprobeerd om het toch werkend te krijgen, zoals sing quotes ('), de single en de double quotes met een escape karakter te markeren (`").

Iemand nog een idee hoe ik dit wel werkend kan krijgen?

If it is broken, fix it. If it ain't broken, make it better!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
BlackBurn schreef op dinsdag 03 mei 2011 @ 11:44:
Iemand nog een idee hoe ik dit wel werkend kan krijgen?
Wilde gok: URL encoding? Dus een spatie = %20 (of een + eventueel) etc. Dus a-la: new%20item of new+item

En anders zou ik graag zien welke manieren van escaping je dan precies hebt geprobeerd; wellicht dat je daar een fout maakt.

[ Voor 19% gewijzigd door RobIII op 03-05-2011 11:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 13-09 19:26

BlackBurn

One Ring To Rule Them All

Topicstarter
RobIII schreef op dinsdag 03 mei 2011 @ 11:48:
[...]

Wilde gok: URL encoding? Dus een spatie = %20 (of een + eventueel) etc. Dus a-la: new%20item of new+item
Helaas, de node wordt dan wel toegevoegd, echter inclusief de %20 of de +.

If it is broken, fix it. If it ain't broken, make it better!


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Moet je niet de spatie door het escapekarakter laten voorafgaan?
code:
1
 write-output -inputobject hello` world

[ Voor 25% gewijzigd door P_de_B op 03-05-2011 11:55 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 17-09 09:11
Geen ervaring met powershell maar op deze pagina kom ik volgende tegen.
$msg = "Every ""lecture"" should cost `$5000"
$msg = "Every 'lecture' should cost `$5000"
probeer eens te 'raak me' te gebruiken.

geheelonthouder met geheugenverlies


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 13-09 19:26

BlackBurn

One Ring To Rule Them All

Topicstarter
P_de_B schreef op dinsdag 03 mei 2011 @ 11:55:
Moet je niet de spatie door het escapekarakter laten voorafgaan?
code:
1
 write-output -inputobject hello` world
TallManNL schreef op dinsdag 03 mei 2011 @ 11:56:
Geen ervaring met powershell maar op deze pagina kom ik volgende tegen.

[...]


probeer eens te 'raak me' te gebruiken.
Helaas, beide resulteert in de foutmelding dat (me) een invalide argument is.

If it is broken, fix it. If it ain't broken, make it better!


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Wel vreemd, bij mijn voorbeeld werkt het wel om een spatie te escapen. Kun je de inhoud van $command eens pasten?

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
^ Dat. En moet je eventueel niet dubbel escapen? Als ik het goed begrijp is plink.exe hier ook nog bij betrokken?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 17-09 08:51

@r!k

It is I, Leclerq

En als je het zo probeert:

"""raak me""""

drie ervoor dus en 4 erachter (1tje om alles af te sluiten). volgens mij moet je quotes als jeze op die manier wilt meenemen van beide kanten meteen omsluiten door quotes.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 13-09 19:26

BlackBurn

One Ring To Rule Them All

Topicstarter
P_de_B schreef op dinsdag 03 mei 2011 @ 12:01:
Wel vreemd, bij mijn voorbeeld werkt het wel om een spatie te escapen. Kun je de inhoud van $command eens pasten?
Zoals de command nu is:
PowerShell:
1
2
$command = "&$plinkLocation $cacServer -l $cacServerUser -pw $cacServerPass "
$command += "php $cacCLI/add_tree.php --type=node --node-type=header --tree-id=3 --name=""raak me"""


De output die write-host $command geeft.
code:
1
&G:\Powershell\plink.exe server01 -l cactiuser -pw cactipassword php /usr/share/cacti/cli//add_tree.php --type=node--node-type=header --tree-id=3 --name="raak me"


Ik gebruik inderdaad plink om het commando op de linux machien uit te voeren.

Edit: Gelukt!! :)

Mijn uiteindelijke test-code is:
code:
1
2
3
$input = Read-Host "Invoer "
$command = "&$plinkLocation $cacServer -l $cacServerUser -pw $cacServerPass "
$command += "'php $cacCLI/add_tree.php --type=node --node-type=header --tree-id=3 --name=""""$input""""'"


Wel veel dubbele quotes bij de laatste, maar het werkt! :-) + dat ik de complete opdracht die plink moet uitvoeren tussen single quotes heb gezet.

[ Voor 22% gewijzigd door BlackBurn op 03-05-2011 13:06 ]

If it is broken, fix it. If it ain't broken, make it better!

Pagina: 1