Ausführen eines shell-Kommandos mit Argumenten von powershell-Skript
Brauche ich um Sie zu extrahieren und speichern Sie ein paar Tabellen von einer remote-SQL-Datenbank mit bcp. Ich möchte ein powershell-Skript schreiben zum aufrufen von bcp für jede Tabelle, und speichern Sie die Daten. Bisher habe ich dieses Skript erstellt die nötigen Argumente für bcp. Jedoch kann ich nicht herausfinden, wie das übergeben des args zu bcp. Jedes mal, wenn ich das Skript ausführen, es zeigt nur den bcp-Hilfe statt. Das muss etwas sein, das wirklich einfach, dass ich nicht bekommen bin.
#commands bcp database.dbo.tablename out c:\temp\users.txt -N -t, -U uname -P pwd -S <servername>
$bcp_path = "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\bcp.exe"
$serverinfo =@{}
$serverinfo.add('table','database.dbo.tablename')
$serverinfo.add('uid','uname')
$serverinfo.add('pwd','pwd')
$serverinfo.add('server','servername')
$out_path= "c:\Temp\db\"
$args = "$($serverinfo['table']) out $($out_path)test.dat -N -t, -U $($serverinfo['uid']) -P $($serverinfo['pwd']) -S $($serverinfo['server'])"
#this is the part I can't figure out
& $bcp_path $args
InformationsquelleAutor Mike Weerasinghe | 2010-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst
$args
ist eine automatische variable; Sie kann nicht festgelegt werden, so dass jede Zeile wie$args = foo
wird nichts tun (selbst mit strict-Modus auf; obwohl eine Beschwerde wäre auch zu schön gewesen).Dann sind Sie nur am Rande ein einziges argument (Zeichenkette) auf dem Programm. Ich Leerzeichen enthält, aber Sie sind maskiert oder in Klammern eingeschlossen, so dass das Programm sieht nur ein einziges argument.
Benötigen Sie ein array für die Argumente an ein Programm, anstatt eine einzelne Zeichenfolge, wenn Sie wollen, speichern Sie in einer Variablen vorher. Und Sie müssen nennen Sie es etwas anderes, als
$args
:Oder, was ich bevorzugen würde, tatsächlich, Sie können einfach schreiben Sie es in einer einzigen Zeile, die entledigt sich die meisten der Hässlichkeit hier:
InformationsquelleAutor Joey
Einige Kommandozeilen-apps, die Notwendigkeit zu akzeptieren, verrückte Gangnam-style-Argumente, das durch Schrägstriche, Anführungszeichen, Anführungszeichen, Gleichheitszeichen, Doppelpunkt, Bindestriche, ein wahres cocktail.
PowerShell, so meine Erfahrung, manchmal einfach nicht umgehen können. Also Schreibe ich aus einem .cmd-Datei und führen Sie diese aus cmd.exe etwa so:
Stellen Sie sicher, Ausgabe als ASCII, da die Standard-Unicode-vielleicht nicht spielen schön mit cmd.exe (er bellte mich an und zeigte seltsame Zeichen auf meinem ersten Versuch).
Es lohnt sich, Vijay Frage, da es eine Antwort, die besser ist als die anderen hier, wenn Ihr Euch auf PS V3.
InformationsquelleAutor Luke Puplett