ค้นหาเว็บไซต์

ข้อมูลเบื้องต้นเกี่ยวกับ PowerShell ในแอปและเดสก์ท็อปเสมือนของ Citrix


CITRIX และ PowerShell เป็นชื่อที่โดดเด่นเมื่อพูดถึงการจัดการโครงสร้างพื้นฐานด้านไอทีที่ซับซ้อน ไม่น่าแปลกใจเลยที่พวกเขาเสริมซึ่งกันและกันอย่างสมบูรณ์แบบเพื่อขยายขอบเขตการดำเนินการของผู้เชี่ยวชาญด้านไอที

ตัวอย่างเช่น เมื่อจัดการแอปเสมือนและเดสก์ท็อปของ Citrix PowerShell อนุญาตให้ใช้คุณสมบัติบางอย่างจาก Citrix Studio ได้แม่นยำยิ่งขึ้นและกับเป้าหมายหลายรายการพร้อมกัน

ดูบทความเพื่อดูตัวอย่างเพิ่มเติมว่า PowerShell สามารถช่วยคุณประหยัดเวลาและความพยายามในการจัดการ CVDA ได้อย่างไร

เหตุใดจึงใช้ PowerShell สำหรับการจัดการ CVAD

มีเหตุผลหลายประการที่คุณอาจต้องการพิจารณาใช้ PowerShell เพื่อช่วยจัดการสภาพแวดล้อม Citrix ของคุณ

สำหรับฉัน ฉันจะเปิดพร้อมท์ PowerShell โดยที่ฉันมี Citrix cmdlets ที่จำเป็น (ดูภายหลัง) ซึ่งฉันสามารถดูสถานะของสภาพแวดล้อมได้อย่างรวดเร็วจากคำสั่งเดียว และเมื่อฉันเคยเรียกใช้มาก่อน ฉันสามารถค้นหาได้อย่างรวดเร็ว ในประวัติ PowerShell ถาวรของฉัน (ผ่าน ctrl+r) ดังนั้นฉันจึงไม่จำเป็นต้องจำพารามิเตอร์ที่จะใช้หรือพิมพ์อะไรเพิ่มเติมอีก

ซึ่งอาจรวมถึงการค้นหาเซิร์ฟเวอร์ที่โอเวอร์โหลด เซสชันที่ไม่ได้เชื่อมต่อซึ่งไม่ได้รีเซ็ต (และรีเซ็ต) เซิร์ฟเวอร์โดยไม่คาดคิดในโหมดการบำรุงรักษาหรือไม่ได้ลงทะเบียน เป็นต้น

อีกเหตุผลหนึ่งคือระบบอัตโนมัติ ตัวอย่างเช่น ฉันมีปัญหากับลูกค้าโดยเหตุการณ์เฉพาะในบันทึกเหตุการณ์ในเครื่องบนเซิร์ฟเวอร์ CVAD หมายความว่าตัวจัดคิวงานพิมพ์อยู่ในสถานะที่ไม่สามารถกู้คืนได้จนกว่าจะรีบูตและแอปพลิเคชันใดๆ ที่พยายามพิมพ์จะหยุดทำงาน

เพื่อเป็นการลดผลกระทบในระยะสั้น ฉันเขียนสคริปต์ที่ทำงานเป็นประจำตามงานที่กำหนดเวลาไว้เพื่อตรวจสอบเหตุการณ์นี้ และหากเกิดขึ้น สคริปต์จะทำให้เซิร์ฟเวอร์เข้าสู่โหมดการบำรุงรักษา เพื่อป้องกันการเข้าสู่ระบบใหม่ และส่งข้อความถึงผู้ใช้ว่าพวกเขาอาจต้องการ ออกจากระบบแล้วเปิดใหม่อีกครั้ง เพื่อไปที่เซิร์ฟเวอร์ที่ไม่ได้รับผลกระทบ

ในการเรียกใช้สคริปต์ครั้งต่อๆ ไป มันจะตรวจสอบผู้ใช้บนเซิร์ฟเวอร์ที่ประสบปัญหา และหากไม่มี ก็จะนำสคริปต์ออกจากโหมดการบำรุงรักษาและรีบูต

ข้อกำหนดเบื้องต้น

การตัดสินใจครั้งแรกคือว่าคุณจำเป็นต้องจัดการโครงสร้างพื้นฐานภายในองค์กรหรือบนคลาวด์ เนื่องจากต้องใช้โมดูล PowerShell ที่แตกต่างกันซึ่งไม่สามารถอยู่ร่วมกันบนเครื่องเดียวกันได้ แม้ว่าโชคดีที่คำสั่งส่วนใหญ่จะเหมือนกันระหว่างทั้งสอง ดังนั้นเมื่อคุณรู้คำสั่งหนึ่งแล้ว ง่ายมากที่จะเปลี่ยนไปใช้อันอื่น

PowerShell cmdlet ที่จำเป็นสำหรับภายในองค์กรได้รับการติดตั้งเมื่อมีการติดตั้ง Citrix Studio แต่ไม่แนะนำให้เรียกใช้คอนโซลการจัดการหรือเครื่องมือใดๆ บน Delivery Controller เนื่องจากการดำเนินการนี้จะใช้ทรัพยากรซึ่งจากนั้นจะไม่สามารถใช้งานได้สำหรับบทบาทหลัก

ดังนั้น วิธีที่ง่ายที่สุดในการติดตั้ง PowerShell cmdlets ที่จำเป็นสำหรับภายในองค์กรคือการติดตั้ง Citrix Studio จาก CVAD ISO บนเครื่องอื่น เช่น เซิร์ฟเวอร์การจัดการที่มีการติดตั้งคอนโซลทั้งหมด

หรือหากคุณไม่ต้องการติดตั้ง Studio ให้เมาต์ CVAD ISO และเรียกใช้สิ่งต่อไปนี้ในพรอมต์ PowerShell ที่ยกระดับจากโฟลเดอร์ X64Citrix Desktop Delivery Controller ของ ISO ที่ติดตั้ง:

PowerShell in CVAD-1:

gci -Name *powershell*.msi | %{ $_ ; start msiexec "/i ""$_"" /qn /norestart"  -wait }

PowerShell cmdlet ที่จำเป็นสำหรับ Citrix Cloud มีอยู่ใน Citrix Virtual Apps และ Desktops Remote PowerShell SDK

หน้าเว็บยังมีข้อมูลเกี่ยวกับการรับรองความถูกต้องเพิ่มเติมที่จำเป็นอีกด้วย จะต้องไม่ถูกติดตั้งบนเครื่องที่ติดตั้งส่วนประกอบ PowerShell ภายในองค์กร

เป็นความคิดที่ดีที่จะจับคู่เวอร์ชันของ PowerShell cmdlets กับเวอร์ชัน (ขั้นต่ำ) ของ CVAD ที่คุณติดตั้งไว้ เช่นเดียวกับที่คุณทำกับ Studio

เวอร์ชันของ Windows PowerShell ที่คุณใช้นั้นขึ้นอยู่กับคุณ เนื่องจากเวอร์ชันระหว่าง 2.0 ถึง 5.1 จะใช้งานได้ แม้ว่าฉันขอแนะนำให้เปิดตัวเวอร์ชัน 5.1 เนื่องจากให้ cmdlets มากที่สุดและมีความสามารถด้วย

การตระเตรียม

ในการใช้ CVAD cmdlets เราจำเป็นต้องโหลดโมดูล PowerShell ที่มีอยู่ ยกเว้นจนกระทั่งออกล่าสุด Citrix ใส่ cmdlets เหล่านี้ลงใน PowerShell snapins แทนที่จะเป็นโมดูล ซึ่งหมายความว่าเราโหลดด้วยวิธีที่แตกต่างออกไปเล็กน้อย

หากต้องการโหลด Citrix cmdlets ทั้งหมดจาก snapin เราสามารถเรียกใช้สิ่งนี้:

PowerShell in CVAD-2:

Add-PSSnapin -Name Citrix*

อย่างไรก็ตาม อาจใช้เวลานานพอสมควรในการดำเนินการให้เสร็จสิ้น เนื่องจากจะโหลด cmdlet ที่มีอยู่ทั้งหมด ในขณะที่คุณอาจต้องการเพียง snapin เดียวเท่านั้น ตัวอย่างเช่น หากคุณใช้ Get-BrokerMachine และ cmdlets ที่เกี่ยวข้องเพื่อดึงข้อมูลเครื่อง CVAD คุณสามารถเรียกใช้สิ่งนี้แทนได้ ซึ่งจะเร็วกว่ามาก:

PowerShell in CVAD-3:

Add-PSSnapin -Name Citrix.Broker.Admin.*

หากต้องการทราบว่า cmdlet เฉพาะของ Snapin ใดอยู่ในนั้น ให้โหลด Citrix Snapins ทั้งหมดดังที่แสดงเป็นอันดับแรกในส่วนนี้ จากนั้นระบุ cmdlet เป็นอาร์กิวเมนต์ให้กับ Get-Command จากนั้นมันจะแจ้งให้คุณทราบชื่อของ snapin มีไว้ให้คุณโหลดแทนได้

ด้วยการเปิดตัว CVAD ตั้งแต่ปี 1912 LTSR เป็นต้นไป เราสามารถโหลด cmdlets จากโมดูลแทนผ่านทาง Import-Module (นามแฝง ipmo) แทน Add-PSSnapin (นามแฝง asnp) แต่เช่นเดียวกับข้างต้นตรงที่เราสามารถโหลดโมดูล Citrix ทั้งหมดโดยการระบุ “Citrix* ” เป็น นำเข้าโมดูล หรือเฉพาะโมดูลเฉพาะที่ต้องการ อีกครั้งโดยการโหลด โมดูล Citrix ทั้งหมด จากนั้นใช้ Get-Command บน cmdlets เราจำเป็นต้องดูว่ามีโมดูลใดบ้าง

เพื่อให้สคริปต์ของฉันเข้ากันได้กับ CVAD ทั้งรุ่นใหม่และเก่า โดยทั่วไปฉันจะใช้บางอย่างเช่นโค้ดที่แสดงด้านล่าง ซึ่งจะพยายามโหลดโมดูล Citrix ที่จำเป็นก่อน และหากล้มเหลว ฉันจะลองโหลด Snapin ที่เทียบเท่ากัน:

PowerShell in CVAD-4:

## new CVAD have modules so use these in preference to snapins which are there for backward compatibility
if(!(Import-Module -Name Citrix.DelegateAdmin.Commands -ErrorAction SilentlyContinue -PassThru -Verbose:$false) -and! (Add-PSSnapin -Name Citrix.Broker.Admin.* -ErrorAction SilentlyContinue -PassThru -Verbose:$false))
{Throw 'Failed to load Citrix PowerShell cmdlets - is this a Delivery Controller or have Studio or the PowerShell SDK installed?'
}

การดึงข้อมูล

เมื่อเราติดตั้งและโหลด cmdlets ที่เราต้องการแล้ว เราก็พร้อมที่จะไป คำสั่งที่ฉันส่วนใหญ่ใช้เพื่อดึงข้อมูลเริ่มต้นด้วย Get-Broker เช่น Get-BrokerMachine, GetBrokerDesktopGroup (สำหรับกลุ่มการจัดส่ง), Get-BrokerCatalog และ Get-BrokerSession หากต้องการดู Citrix cmdlets ทั้งหมดสำหรับการดึงข้อมูล คุณสามารถเรียกใช้สิ่งต่อไปนี้:

PowerShell in CVAD-5:

Get-Command -Module Citrix* -Verb Get

ซึ่งจะได้ผลไม่ว่าคุณจะใช้ snapins หรือโมดูล หากต้องการดูความช่วยเหลือสำหรับคำสั่งเฉพาะ ให้เรียกใช้ดังนี้:

PowerShell in CVAD-6:

Get-Help -Name Get-BrokerMachine -ShowWindow

คุณยังสามารถแทนที่ -ShowWindow ด้วย -Online เพื่อเปิดหน้าต่างเบราว์เซอร์ด้วยความช่วยเหลือ โดยสมมติว่าคุณมีการเข้าถึงอินเทอร์เน็ตภายนอก

อย่างไรก็ตาม ฉันแทบไม่ต้องใช้ RTFM เนื่องจากอาร์กิวเมนต์ที่ส่งไปยัง cmdlets โดยทั่วไปจะเหมือนกัน และคุณสามารถกดแท็บผ่านหรือกด ctrl+space หลังจากพิมพ์เครื่องหมายลบ/ขีดกลางหลังชื่อ cmdlet เพื่อแสดงรายการที่เป็นไปได้ทั้งหมด อาร์กิวเมนต์ที่คุณสามารถเลื่อนผ่านได้โดยใช้ปุ่มเคอร์เซอร์

มาดูกันว่าเรามีเครื่องใดบ้างใน CVAD โดยการรัน Get-BrokerMachine (รูปที่ 1):

รูปที่ 1: ผลลัพธ์ของ PowerShell จากการเรียกใช้ Get-BrokerMachine

ตอนนี้มันไม่ได้เป็นไปด้วยดีใช่ไหม? หากคุณรันสิ่งนี้บน Delivery Controller ซึ่งไม่แนะนำ มันจะใช้งานได้จริงและแสดงรายการเครื่องจักร

อย่างไรก็ตาม ฉันรันสิ่งนี้บน VM ที่เป็นไปตามข้อกำหนดเบื้องต้น แต่ไม่ใช่ Delivery Controller ดังนั้นจึงไม่รู้ว่าเครื่องใด (Delivery Controller) ที่จะส่งคำขอไป ดังนั้นจึงใช้ค่าเริ่มต้นในการสืบค้น localhost ซึ่งล้มเหลวเนื่องจากไม่ใช่ Delivery Controller (หรือ Cloud Connector หากคุณใช้ Citrix Cloud)

ในการบอก cmdlets ว่า Delivery Controller ใดที่จะเชื่อมต่อ ซึ่งหมายความว่าเราสามารถเชื่อมต่อกับฟาร์ม/อินสแตนซ์ที่แตกต่างจากเครื่องเดียวกันซึ่งยุ่งยากกับ Studio ได้ เราใช้อาร์กิวเมนต์ -AdminAddress (ดูรูปที่ 2) ดังนั้น : :

รูปที่ 2: เอาต์พุต PowerShell จากการรัน Get-BrokerMachine ด้วยอาร์กิวเมนต์ -AdminAddress

แต่นั่นอาจทำให้รายการยาวมากซึ่งยากต่อการเข้าใจ ดังนั้นเราจึงสามารถคว้าคุณสมบัติที่เราสนใจโดยดูจากรายการยาวนี้ (ดูรูปที่ 3; คุณยังสามารถกดแท็บกรอกคุณสมบัติที่ส่งไปยัง ได้ Select-Object (นามแฝง select)) หรือการตั้งค่าของฉันคือการไปป์ที่ Out-GridView ซึ่งให้มุมมองตารางบนหน้าจอซึ่งคุณสามารถจัดเรียงและกรองเพิ่มเติมได้ ข้อมูล (รูปที่ 4)

รูปที่ 3: คุณสามารถแสดงคุณสมบัติเฉพาะได้โดยส่งเอาต์พุตจาก Get-BrokerMachine ไปยัง Select-Object

รูปที่ 4: การวางท่อเอาต์พุตจาก Get-BrokerMachine ไปยัง Out-Gridview จะทำให้คุณเห็นภาพรวมของข้อมูลที่ชัดเจน

การเปลี่ยนแปลงสิ่งต่างๆ

โอเค เรารู้วิธีค้นหาสิ่งที่เราเห็นใน Studio ส่วนใหญ่ด้วย Get-Broker* cmdlets เพียงไม่กี่รายการ แต่จะเป็นอย่างไรหากเราต้องการเปลี่ยนแปลงบางอย่าง ตัวอย่างเช่น หากเราต้องการให้เครื่องบางเครื่องเข้าสู่โหมดการบำรุงรักษา เราสามารถทำได้ผ่านชื่อเครื่อง รวมถึงรูปแบบ โดยการไพพ์ (กรอง) ผลลัพธ์จาก Get-BrokerMachine หรือส่งผ่านเครื่องหนึ่งเครื่องขึ้นไป ก่อนหน้านี้ส่งคืนจาก Get-BrokerMachine ที่จัดเก็บไว้ในอาร์เรย์ไปยังอาร์กิวเมนต์ -InputObject ของ Set-BrokerMachine

รูปที่ 5: การกำหนดค่าเครื่องใน CVAD ผ่าน PowerShell

โปรดตรวจสอบให้แน่ใจว่าคุณรู้ว่าคุณตั้งใจจะทำอะไรให้สำเร็จและสคริปต์จะทำอะไรจริงๆ คุณจะเห็นว่ามันจะง่ายมาก ตัวอย่างเช่น การทำให้ทุกเครื่องเข้าสู่โหมดการบำรุงรักษา ซึ่งอาจไม่ใช่ข่าวดีสำหรับผู้ใช้ของคุณในเวลา 09.00 น. เช้าวันจันทร์

เมื่อเขียนสคริปต์ที่อาจดำเนินการที่ไม่พึงประสงค์ ฉันมักจะใช้กลไกการยืนยันในตัวของ PowerShell โดยล้อมคำสั่งที่เปลี่ยนแปลงสิ่งต่าง ๆ ไว้ในบล็อก $PSCmdlet.ShouldProcess ตามบทความนี้

สคริปต์เหล่านี้ยังคงสามารถทำงานได้โดยไม่ต้องให้ผู้ใช้ดำเนินการใดๆ โดยการระบุ -Confirm:$false
โปรดสังเกตว่าเมื่อเราใช้ -AdminAddress หนึ่งครั้งในเซสชันที่เราไม่ ต้องระบุอีกต่อไป

PowerShell ใน Citrix สตูดิโอ

หวังว่าบทความนี้จะมีเนื้อหาเพียงพอที่จะช่วยให้คุณเริ่มต้นใช้งาน PowerShell ใน CVAD ได้ มีตัวอย่างสคริปต์มากมายสำหรับงานทุกประเภท แม้ว่าจะตรวจสอบสิ่งเหล่านี้ก่อนใช้งานในสภาพแวดล้อมการใช้งานจริงเสมอ เกรงว่างานเหล่านี้จะเสียหายโดยไม่ได้ตั้งใจหรือจงใจ นี่คือจุดที่สภาพแวดล้อมการทดสอบแบบแยกส่วนสามารถประเมินค่าได้

ในบางครั้ง อาจไม่ชัดเจนว่าจะดำเนินการอย่างไรใน Studio หากสิ่งนี้เกิดขึ้น ให้ดำเนินการใน Studio จากนั้นไปที่แท็บ PowerShell เพื่อดู PowerShell cmdlet ที่ใช้และอาร์กิวเมนต์ที่ใช้

รูปที่ 6: แท็บ PowerShell ใน Citrix Studio แสดง PowerShell cmdlet ที่ใช้สำหรับดำเนินการการกระทำ

จากที่กล่าวมาข้างต้น เราสามารถละเว้น -BearerToken และ -LoggingId ได้ เนื่องจากไม่จำเป็น หากต้องการรับ UID สำหรับแค็ตตาล็อกเพื่อเพิ่มเครื่อง เราจะเรียก Get-BrokerCatalog สำหรับแค็ตตาล็อกที่เราต้องการ:

รูปที่ 7: คำสั่ง PowerShell แบบง่ายสำหรับการดึงข้อมูล UID ของแค็ตตาล็อก

บทสรุป

ฉันหวังว่าบทความนี้จะแนะนำให้คุณรู้จักกับแนวทางและแนวคิดบางอย่างที่สามารถช่วยให้คุณทำงานประจำวันของคุณด้วย CVAD ได้ง่ายขึ้น

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการทำงานร่วมกันของ CITRIX และ PowerShell คุณสามารถตั้งตารอบทความถัดไป ซึ่งจะเน้นไปที่การใช้ PowerShell กับ CITRIX Machine Creation Services (MCS)

คอลเลกชันสคริปต์ PowerShell ฟรี

บทความที่เกี่ยวข้อง