เมื่อ PowerShell เห็นคำสั่งเริ่มต้นด้วยสตริงมันก็แค่ประเมินสตริงนั่นคือมันมักจะสะท้อนไปยังหน้าจอเช่น:
PS> "Hello World"
Hello World
หากคุณต้องการให้ PowerShell ตีความสตริงเป็นชื่อคำสั่งให้ใช้ตัวดำเนินการโทร (&) ดังนี้:
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'
หลังจากนั้นคุณอาจต้องอ้างพารามิเตอร์ / คู่อาร์กิวเมนต์ที่มีช่องว่างและ / หรือเครื่องหมายคำพูด เมื่อคุณเรียกใช้ไฟล์ EXE เช่นนี้ด้วยอาร์กิวเมนต์บรรทัดคำสั่งที่ซับซ้อนมักจะมีประโยชน์มากที่จะมีเครื่องมือที่จะแสดงให้คุณเห็นว่า PowerShell ส่งอาร์กิวเมนต์ไปยังไฟล์ EXE อย่างไร PowerShell ชุมชนส่วนขยายมีเครื่องมือเช่น มันถูกเรียกว่า echoargs คุณเพียงแค่แทนที่ไฟล์ EXE ด้วย echoargs โดยปล่อยให้อาร์กิวเมนต์ทั้งหมดเข้าที่และจะแสดงให้คุณเห็นว่าไฟล์ EXE จะรับอาร์กิวเมนต์ได้อย่างไรตัวอย่างเช่น:
PS> echoargs -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data>
Arg 2 is <Source=mysource;Integrated>
Arg 3 is <Security=false;User>
Arg 4 is <ID=sa;Pwd=sapass!;Database=mydb;>
Arg 5 is <-dest:dbfullsql=Data>
Arg 6 is <Source=.\mydestsource;Integrated>
Arg 7 is <Security=false;User>
Arg 8 is <ID=sa;Pwd=sapass!;Database=mydb; computername=10.10.10.10 username=administrator password=adminpass>
การใช้ echoargs คุณสามารถทดลองได้จนกว่าจะทำให้ถูกต้องตัวอย่างเช่น
PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;"
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>
ปรากฎว่าฉันพยายามมากเกินไปก่อนที่จะรักษาอัญประกาศคู่รอบสตริงการเชื่อมต่อ เห็นได้ชัดว่าไม่จำเป็นเพราะแม้กระทั่ง cmd.exe จะกำจัดสิ่งเหล่านั้นออก
BTW สวมหมวกให้กับทีม PowerShell พวกเขาค่อนข้างมีประโยชน์ในการแสดงให้ฉันเห็นคาถาที่เฉพาะเจาะจงของคำพูดเดี่ยวและสองเพื่อให้ได้ผลลัพธ์ที่ต้องการ - ถ้าคุณต้องการที่จะให้คำพูดคู่ภายในอยู่ในสถานที่ :-) พวกเขายังตระหนักว่านี่เป็นพื้นที่แห่งความเจ็บปวด แต่พวกเขาได้รับผลกระทบจากจำนวนคนที่ได้รับผลกระทบจากปัญหาเฉพาะ หากนี่เป็นเรื่องที่เจ็บปวดสำหรับคุณโปรดลงคะแนนการส่งบั๊ก PowerShellนี้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแยกวิเคราะห์ PowerShell ให้ดูซีรี่ส์บล็อก PowerShell ที่มีประสิทธิภาพของฉัน- รายการเฉพาะ10 - "การทำความเข้าใจโหมด PowerShell ในการแยกวิเคราะห์"
UPDATE 4/4/2012: สถานการณ์นี้ง่ายต่อการจัดการใน PowerShell V3 เห็นนี้โพสต์บล็อกสำหรับรายละเอียด