PowerShell? คุณใช้หรือไม่ คุณช่วยแสดงให้ฉันเห็นถึงการจัดการระบบที่ยอดเยี่ยมที่ฉันสามารถทำได้ [ปิด]


45

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

ฉันอยากจะรู้:

  1. คุณใช้หรือไม่
  2. กระบวนการ 'bootstrapping' ของคุณใช้กับ PowerShell อย่างไร
  3. คุณได้เขียนสคริปต์เกี่ยวกับงานการดูแลระบบชนิดใด
  4. ฉันเป็นผู้ดูแลฐานข้อมูล SQL Server มีอะไรเจ๋ง ๆ ที่ต้องทำกับมัน?

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


JScript ตายไปแล้วเหรอ?
Sophie Alpert

7
พยายามที่จะไม่หมุนรอบด้วยพาดหัวข่าวที่ทำให้เข้าใจผิดของคุณในครั้งต่อไป
Jaykul

อาจเป็นเพราะบางครั้งฉันก็หวังว่ามันจะหายไปเหมือน jscript มันเป็นแค่ฉันหรือมันน่าเกลียด & verbose มาก?
Nick Kavadias

คำตอบ:


34

Microsoft กำลังทำทุกอย่างเท่าที่ทำได้เพื่อให้ PowerShell เป็นตัวเลือกของผู้ใช้ที่มีอำนาจและนักเขียนอัตโนมัติทุกที่ ไปเป็นวันของการรวบรวมรหัสใน. NET เพื่อทำสิ่งเดียวกันตอนนี้คุณเพียงแค่ notepad.exe และ google เราเป็นแฟนตัวยงของมันในสำนักงานโดยเฉพาะอย่างยิ่งเนื่องจากคอนโซลการจัดการของ Exchange 2007 ไม่ได้รวมทุกสิ่งที่คุณสามารถทำได้ใน PowerShell Microsoft จงใจล้มเหลวในการใช้สิ่งต่าง ๆ ที่ทำได้เพียงครั้งเดียวในระยะเวลาอันสั้นและง่ายต่อการพัฒนาวิธีนั้นซึ่งบังคับให้ใช้อย่างจริงจังหากคุณมีสิ่งใดที่คล้ายกับสภาพแวดล้อมที่ซับซ้อน

การจัดการผลิตภัณฑ์รุ่นใหม่ของ Microsoft (Win7, Windows Server 2008, Exchange 2007/2010, SQL Server 2008) ล้วนมีตะขอ PowerShell ที่หลากหลาย เมื่อ Remote Powershell (PowerShell 2.0 IIRC) ถูกปรับใช้กับ Server 2008 R2 มันจะมีประโยชน์มากขึ้นสำหรับนักเขียนอัตโนมัติ

สิ่งที่เราทำไปแล้ว:

  • สร้างหน้าเว็บเพื่อมอบหมายงานผู้ดูแลระบบบางอย่างเพื่อช่วยเหลือผู้ใช้ หน้าเว็บปิดคำสั่งที่เรียกใช้งานใน PowerShell สิ่งที่มันทำ:
    • สร้างและลบบัญชีผู้ใช้รวมถึงการจัดเตรียมกล่องจดหมาย Exchange 2007 และโฮมไดเรกทอรี
    • ปลดล็อคบัญชีที่ถูกล็อค
    • สร้าง / ลบกลุ่ม
    • เพิ่ม / ลบผู้ใช้จากกลุ่ม
    • ย้ายผู้ใช้ระหว่างร้านค้าจดหมาย
    • ตั้งรหัสผ่าน
  • ดึงข้อมูลจากระบบ ERP และส่งข้อมูลสมุดรายชื่อทั่วโลกไปยัง Active Directory ทุกคืน
  • แก้ไขปัญหา LegacyExchangeDN ที่ครอบตัดการโอนย้าย Exchange 2003 เป็น Exchange 2007 ของเรา จำเป็นต้องเพิ่มที่อยู่ X500 ให้กับทุกคนที่เคยมีใน Exchange 2003 สคริปต์ PowerShell ที่ค่อนข้างสั้นซ่อมได้
  • การสร้างสคริปต์ "กล่องจดหมายกลุ่ม" (กล่องจดหมายที่ใช้ร่วมกันในการแลกเปลี่ยนซึ่งผู้ใช้หลายคนสามารถเข้าถึงกล่องจดหมายได้) ซึ่งเป็นกระบวนการที่ทำด้วยมือเป็นอย่างอื่นเนื่องจากลักษณะของข้อมูลที่เราต้องการก่อนที่จะทำการเปิด มันเป็นมาตรฐานการตั้งค่าอย่างมากของกล่องจดหมายเหล่านี้
  • สร้างสคริปต์ที่ดำเนินการผ่านเครื่องที่มีโดเมนทั้งหมดเพื่อรีเซ็ตรีจิสตรีคีย์เฉพาะและรีสตาร์ทบริการ ใช้เวลาดำเนินการ 18 ชั่วโมง แต่ก็ทำงานเสร็จ

ใช่แล้ว PowerShell จะอยู่กับเราซักพัก

แก้ไข : การเพิ่มตัวอย่างโค้ดเนื่องจากได้รับการร้องขอ

$ = รายการนำเข้า CSV ( "groupusers.csv")
$ = $ lastseengroup รายการ [0] .group
$ ADGroupPrefix = "grp.netware."
$ ADGroupSuffix = "{redacted - ในรูปแบบของ, ou = groups, dc = domain, dc = domain, dc = domain}"
รายการสมาชิกตัวแปรที่ชัดเจน
ผู้ใช้ที่ไม่รู้จักเคลียร์ตัวแปร
foreach (รายการ $ ในรายการ $) {
    ถ้า ($ ($ entry.group) -ne $ lastseengroup) {
        echo "สะดุดกับกลุ่มใหม่ $ ($ entry.group), ยอมรับการเปลี่ยนแปลงเป็น $ lastseengroup"
        $ = $ newgroup ADgroupPrefix + $ lastseengroup
        $ newgroupdn = ' "+ "cn = $ newgroup $ ADGroupSuffix" +"'
        echo "รับ DN สำหรับ $ newgroup"
        $ existinggroup = กลุ่ม dsquery domainroot -name $ newgroup
        if (($ existinggroup -ne $ null)) {
            dsmod กลุ่ม $ newgroupdn -chmbr $ รายชื่อสมาชิก
        } อื่น {
            กลุ่ม dsadd $ newgroupdn - ขอบเขต u -secgrp ใช่ - สมาชิก $ memberlist -desc "กลุ่มนำเข้าจาก eDirectory"
        }
        รายการสมาชิกตัวแปรที่ชัดเจน
    }
    $ User = get-user $ ($ entry.member) -ErrorAction SilentlyContinue
    ถ้า ($ User.isvalid) {
        $ = $ UserDN User.distinguishedname
        $ memberlist = $ memberlist + '"' +" $ UserDN "+ '"
    } อื่น {
        $ = $ unknownusers unknownusers + $ ($ entry.member)
    }
    $ lastseengroup = $ ($ entry.group)

}
dsadd group "cn = $ ADGroupPrefix $ lastseengroup $ ADGroupSuffix" -scope u -secgrp ใช่ -members $ memberlist

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


6
PowerShell ระยะไกล !! คุณหมายถึงชอบ ssh!?! เกี่ยวกับเวลา!
Nick Kavadias

2
คุณเรียกใช้สคริปต์ PowerShell จากเว็บไซต์คุณใช้สคริปต์ PowerShell เป็นภาษาการเขียนโปรแกรมเว็บได้อย่างไร คุณใช้ powershellASP หรือไม่ คุณใช้งานสคริปต์ในฐานะผู้ใช้ IIS หรือไม่
quentin

17

เนื่องจากผลิตภัณฑ์เซิร์ฟเวอร์ของ Microsoft จะเปิดใช้งาน PowerShell ตั้งแต่เริ่มต้น (ฉันเชื่อว่า Exchange รุ่นถัดไปมีการกำหนดค่าทั้งหมดที่มีผ่าน PowerShell) และหนังสือเช่นPowerShell ในทางปฏิบัติอธิบายวิธีที่ยอดเยี่ยมในการทำงานอัตโนมัติเป็นอย่างอื่นอย่างน่าเบื่อหน่าย มีเหตุผลที่จะแนะนำว่า PowerShell จะเป็นเทคโนโลยีที่แพร่หลายในเซิร์ฟเวอร์ของ Windows ในระยะเวลาหนึ่ง


หนังสือเล่มนั้นยังอยู่ในช่วงเบต้า / ถูกเขียนขึ้น
Nick Kavadias

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

4
การแลกเปลี่ยนเป็น PowerShell ทั้งหมดตั้งแต่ Exchange 2007 OCS จะมีความสามารถอย่างเต็มที่ใน PowerShell ในรุ่นถัดไป ผลิตภัณฑ์ System Center ส่วนใหญ่รองรับอย่างเต็มที่หรือจะออกรุ่นต่อไป PowerShell ไม่ได้ไปทุกที่
paulr

12

ผมอยากแนะนำให้สกอตต์ของ Hanselman Podcast # ดูเหมือนว่าทีมเซิร์ฟเวอร์ Microsoft ทั้งหมดจะ "ถูกบังคับ" เพื่อให้ PowerShell cmdlets และยังเป็นไปตามไวยากรณ์เดียวที่สอดคล้องกัน

นอกจากนี้บุคคลที่สามเช่นVMwareกำลังนำไปใช้

กล่าวโดยย่อฉันเชื่อว่า PowerShell ที่เริ่มต้นด้วย 2.0 เป็นธุรกิจที่จริงจังในการแทนที่ไฟล์แบทช์สำหรับทุกคน แต่เป็นงานที่มีความสำคัญที่สุด


10

สคริปต์ PowerShell สิบสคริปต์ที่ฉันใช้เป็นผู้ดูแลระบบฐานข้อมูล SQL Server (ทั้งหมดอธิบาย / โพสต์ในบล็อกของฉัน ):

  1. ตรวจสอบพื้นที่ดิสก์บนเซิร์ฟเวอร์ SQL ทั้งหมดและโหลดข้อมูลไปยังตาราง SQL
  2. เรียกใช้รายงานสิทธิ์บนเซิร์ฟเวอร์ SQL ที่ใช้งานจริงทั้งหมดและโหลดข้อมูลไปยังฐานข้อมูล SQL
  3. ค้นหาคลัสเตอร์โหนดและเสมือนWindows Server 2003ทั้งหมดบนเครือข่ายและโหลดไปยังตาราง SQL
  4. ค้นหาฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์ SQL ทั้งหมดตามที่กำหนดไว้ในSCCMและโหลดไปยังตาราง SQL
  5. สร้างดัชนีชี้วัดการสำรองข้อมูลของเซิร์ฟเวอร์ SQL โดยการโหลดข้อมูลสำรองในเซิร์ฟเวอร์ SQL ทั้งหมดไปยังตาราง SQL
  6. ตรวจสอบว่า TCP Offload Engine ถูกปิดใช้งานใน Windows Server 2003 SP2 (นี่เป็นตัวทำลายประสิทธิภาพสำหรับเซิร์ฟเวอร์ SQL หลายตัว)
  7. ตรวจสอบการจัดแนวของพาร์ติชันของดิสก์ (เช่นกันนักฆ่าประสิทธิภาพถ้าดิสก์อยู่ในแนวที่ไม่เหมาะสม)
  8. คัดลอกตาราง SQL จากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์หนึ่ง
  9. Recursivley คัดลอกแพ็คเกจSSISทั้งหมดโดยใช้ MSDB Storage จากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่นรวมถึงโครงสร้างโฟลเดอร์
  10. สร้างโปรแกรมดูการพึ่งพาวัตถุกราฟิกของฉันเอง

8

คุณมีสคริปต์ผู้ดูแลระบบประเภทใดบ้าง

การตรวจสอบแอปพลิเคชัน / บริการ: รับหมายเลขประสิทธิภาพหลักจาก (ระยะไกล) EventLog และกระบวนงานที่เก็บไว้และแสดงจากไฟล์แบตช์เดียว

ฉันเป็น SQL Server DBA แสดงสิ่งดีๆให้ฉันทำ

automssqlbackup : สำรองข้อมูลรายวันสำหรับ MSSQL ด้วยการหมุน (รายวัน = เพิ่ม, รายสัปดาห์ + รายเดือน = เต็ม; เก็บ 5 รายวัน, สำรองข้อมูล 5 สัปดาห์), ซิป, แจ้งเตือนทางอีเมล


+1 สำหรับการสำรองข้อมูล MSSQL ทั้งหมดโดยอัตโนมัติ
Andrei Rînea

ใช่ ... PowerShell เป็นทองคำบริสุทธิ์สำหรับการสำรองข้อมูลอัตโนมัติที่ซับซ้อนใน SQL Server เราใช้เพื่อซิปและเข้ารหัสข้อมูลสำรองรายชั่วโมงแล้วส่งไฟล์ไปยัง Amazon S3 สำหรับจัดเก็บนอกสถานที่: codeblog.theg2.net/2010/02/..
Greg Bray

7

เมื่อก่อนหน้านี้เคยใช้เชลล์สคริปต์ยูนิกซ์จากนั้นย้ายไปที่การจัดการเซิร์ฟเวอร์ของ windows ฉันสามารถพูดได้ว่าฉันซาบซึ้ง powerhell จริงๆ - ฉันไม่มีเวลาหรือความสามารถในการเรียนรู้ไวยากรณ์อาร์เคนมากเกินไปและรู้สึกประหลาดใจมาก สคริปต์ PowerShell สามารถเขียนด้วยภาษาที่ตรงไปตรงมามาก ... เอาสิ่งที่มีค่าในขณะที่ฉันเคย ksh !!

ฉันทำนายว่ามันจะอยู่เป็นเวลานาน


7

ฉันคิดว่ามันยอดเยี่ยม: ด้วย SQL Server 2008 คุณจะได้รับส่วนขยาย PowerShell ใหม่ที่ให้คุณสำรวจฐานข้อมูล SQL เช่นเดียวกับระบบไฟล์หรือรีจิสตรีของคุณ

หลังจากติดตั้งเครื่องมือไคลเอนต์เซิร์ฟเวอร์ SQL คุณสามารถเปิดฐานข้อมูลใด ๆ ใน PowerShell (ผ่านทางเมนูบริบทคลิกขวา) และเล่นกับมันด้วยวิธีการเชิงวัตถุ:

PS SQLSERVER:\SQL\MyServer\MyInstance\Databases\ExampleDB\>function prompt {"PS >"}
PS >cd tables
PS >dir

SCHEMA          NAME         CREATED
------          ----         -------
dbo             MyTable      25/06/2009 17:02

PS > dir | format-table name, columns, rowcount, parent

NAME            COLUMNS      ROWCOUNT      PARENT
----            -------      --------      ------
MyTable         {Id, Name}   0             {ExampleDB}

PS >$myTable = dir | where {$_.Name -eq "MyTable"}
PS >$myTable.Script()

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[MyTable](
[Id] [int] IDENTITY(1,1) NOT NULL
[Name] [nText] NOT NULL
) ON [PRIMARY]

PS >set-location \SQL\AnotherServer\Default
PS >cd databases\Northwind\tables
PS >$myTables = dir | where {$_.Rowcount -gt 100 -and $_.HasIndex -eq 1}
PS >$myTables.Count

8

PS >foreach ($table in $tables) {$table.RebuildIndexes(90)}

โปรดสังเกตบรรทัดแรกเพียงเปลี่ยนพรอมต์เพื่อให้ไม่นาน

หวังว่านอกเหนือจากนั้นมันเป็นตัวเองชัดเจนสิ่งที่เกิดขึ้นที่นี่ :)


+1 ว้าวนี่มันมีประโยชน์ทีเดียว ขอบคุณ!
jftuga

5

ขณะนี้ SQL Server 2008 มีตัวเลือกบริบท PowerShell ใน Management Studio ดังนั้นมากกว่าที่ Exchange จะโอบกอดมัน นอกจากนี้ให้คิดว่ามันเป็นการทดแทนสำหรับ DOS เพราะนั่นเป็นสิ่งที่ MS คิดเพราะพวกเขาไม่สามารถปรับปรุงความปลอดภัยของ DOS สำหรับปัญหาความเข้ากันได้ย้อนหลังดังนั้นพวกเขาจึงเพิ่งสร้างสิ่งใหม่และ wammo แก้ไขปัญหา!


4

ฉันก็เป็น DBA เหมือนกันและเป็นผู้เก็บข้อมูลนาน ๆ กลับไปที่ไฟล์แบตช์ DOS, V3.3! ย้ายไปที่ VB Script แต่ PS มีประสิทธิภาพมาก ลองดูที่ - ขออภัยฉันไม่สามารถโพสต์ลิงก์ได้เนื่องจากฉันเป็นผู้ใช้ใหม่ รับสิ่งนี้จากบล็อกของ Otto Helweg มันเป็นเครื่องมือสินค้าคงคลังซอฟต์แวร์ราคาถูกและร่าเริง

  • 1- ดึงรายชื่อคอมพิวเตอร์เพื่อสืบค้นจากตารางฐานข้อมูล
  • 2- เพิ่มข้อมูลและเวลาปัจจุบันลงในผลลัพธ์
  • 3- บันทึกผลการตรวจสอบลงในฐานข้อมูล

ตัวอย่างสคริปต์ PowerShell:

# Open the database connection
$dbConn = new-object System.Data.SqlClient.SqlConnection "server=kcdb;database=Inventory;Integrated Security=sspi"
$dbConn.Open()
$sqlQuery = $dbConn.CreateCommand()

# Get all known computers
$sqlQuery.CommandText = "select * from Inventory..Computers"
$reader = $sqlQuery.ExecuteReader()
$computersToQuery = @()
while ($reader.Read()) {
   $computersToQuery += $reader["Computer"]
}

# Close the database connection
$dbConn.Close()

$softwareInventory = @{}
foreach ($computer in $computersToQuery) {
   $psinfoOutput = ./psinfo.exe -s Applications \\$computer

   $foundSoftwareInventory = 0
   $computerName = ""
   foreach ($item in $psinfoOutput) {
      if ($foundSoftwareInventory -eq 1) {
         # Force the results to a string
         # Remove any single quotes which interfere with T-SQL statements
         # Load the result into a hash whereby removing any duplicates
         [string]$softwareInventory[$computerName][$item.Replace("'","")] = ""
      }

      if ($item -like "System information for *") {
         $computerName = $item.Split("\")[2].TrimEnd(":")
      } elseif ($item -eq "Applications:") {
         $foundSoftwareInventory = 1
         $softwareInventory[$computerName] = @{}
      }
   }
}

$dbConn = new-object System.Data.SqlClient.SqlConnection "server=kcdb;database=Inventory;Integrated Security=sspi"
$dbConn.Open()
$sqlQuery = $dbConn.CreateCommand()

foreach ($computer in $softwareInventory.Keys) {
   foreach ($softwareItem in $softwareInventory[$computer].Keys) {
      "Loading-" + $computer + ":" + $softwareItem

      # Try an Update then an Insert 
      trap {
         $sqlQuery.CommandText = "update Inventory..SoftwareInventory set AuditDate = getdate() where  Computer = '" + $computer + "' and Software = '" + $softwareItem + "'"
         $result = $sqlQuery.ExecuteNonQuery()
         continue
      }

      $sqlQuery.CommandText = "insert into Inventory..SoftwareInventory (Computer,Software,AuditDate) values ('" + $computer + "','" + $softwareItem + "',getdate())"
      $result = $sqlQuery.ExecuteNonQuery()
   }
}

$dbConn.Close()

เดฟเจ


3

ทีมของฉันทำงานต่อไปนี้เป็นประจำด้วย PowerShell

  • แสดงรายการหน่วยความจำที่มีอยู่บนโหนดทั้งหมดของคลัสเตอร์ Hyper-V ของเรา
  • จัดการตัวกรอง Netapp
  • จัดเตรียมเครื่องเสมือน Hyper-V ใหม่
  • เขียนและอ่านจากรายการ SharePoint โดยทางโปรแกรม

วันต่อวันฉันมี PS แจ้งตลอดเวลาและใช้งานสำหรับงานที่ฉันเคยใช้ CMD

นี่คือตัวอย่างรหัสบางส่วนสำหรับการอ่านรายการ Sharepoint ฉันใช้บริการเว็บจาก Sharepoint และ cmdlet "New-WebServiceProxy" ใหม่ใน PowerShell V2.0

$url = "http://server/sites/site/_vti_bin/lists.asmx"
$listWebService = new-webServiceProxy -uri $url -UseDefaultCredential
$listName = "MyList"
$viewGuid = $null
$query= $null
$viewFields = $null
$numRowsReturned = 20000
$queryOptions = $null
$result = $listWebService.GetListItems($listName,$ViewGuid,$query,$viewFields,$numRowsReturned,$queryOptions,$null)

Oisin Grehan มีบล็อกโพสต์ที่ยอดเยี่ยมเกี่ยวกับการใช้ Sharepoint Web Servicesที่ฉันใช้เป็นพื้นฐานในการสร้างฟังก์ชั่นทั้งหมดของฉัน เขายังมีสคริปต์ใหม่ webservice.ps1 ที่ยอดเยี่ยมที่คุณสามารถใช้ได้หากคุณยังใช้ PowerShell V1 อยู่

นอกจากนี้นี่คือฟังก์ชั่นพื้นฐานที่ฉันใช้เพื่อให้ได้หน่วยความจำที่มีอยู่บนโหนดในคลัสเตอร์ของฉัน

Function Get-AvailableMemory {
param
(
[string[]]
$servers
)
BEGIN {
$query = "select AvailableBytes,__SERVER from Win32_PerfRawData_PerfOS_Memory"

$availableMemory = @{
                    Name="AvailableMemory";
                    Expression = {[math]::round($_.AvailableBytes/1gb,2)}
                    }
$serverName = @{  
                Name ="Server";
                Expression = {$_."__SERVER"}                                      
               }
}
PROCESS {
foreach ($server in $servers){
    get-wmiobject -query $query -computer $server |
    select-object $availableMemory, $serverName
    }
}

END {}    

}

มีรหัสตัวอย่างที่คุณต้องการแบ่งปันหรือไม่ ฉันสนใจอ่านและเขียนรายการ SharePoint เป็นพิเศษ
Brian

2

ฉันพยายาม PowerShell สำหรับโครงการขนาดเล็กที่ทำงาน - การโยกย้ายประจำวันของส่วนย่อยของ ~ ผู้ใช้ 600 คนและ ~ 200 กลุ่มจากองค์กรADกับระบบ UNIX เก่าใช้CSVเหมือนไฟล์ ฉันได้รับสคริปต์VBScript 500 บรรทัด(!) ซึ่งดึงกลุ่มเดียวและผู้ใช้เป็นจุดเริ่มต้น

มันกลับกลายเป็นว่าสคริปต์ PowerShell ~ 20 บรรทัดสามารถทำทุกอย่างได้ ...

ในฐานะผู้ใช้ * NIX (ฝั่งเซิร์ฟเวอร์และไคลเอนต์) ฉันรู้สึกประหลาดใจอย่างมากกับ PowerShell แม้ว่าคุณเพิ่งรู้ชุดคำสั่งย่อย ๆ เพียงเล็กน้อย แต่คุณก็สามารถทำงานที่ทรงพลังกับมันได้ ฉันต้องการการเข้าถึงระยะไกลของSSH (เหมือน) ...


ค้นหา psremoting
แซม

1

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


ลองใช้สคริปต์ PowerShell เล็ก ๆ นี้เพื่อสร้างชุดประกอบของคุณและเร่งความเร็วคอนโซลที่ใช้ PowerShell ทั้งหมดของคุณ: msexchangeteam.com/archive/2008/08/01/449426.aspx
Jesse Weigert

1

Powershell นั้นไม่สมบูรณ์ แต่ถ้าคุณใช้คุณจะรู้ว่ามันเจ๋งมาก การเข้าถึงไลบรารี่. net ทั้งหมดรวมทั้ง cmdlet ในตัว (และสร้าง cmdlet ของคุณเองโดยใช้ PS ใน 2.0) นั่นยอดเยี่ยมมาก

สิ่งเดียวที่ฉันคิดว่าขาดหายไปคือ IDE ที่ดีซึ่งฉันแน่ใจว่าจะมาจาก MS สักวัน ตอนนี้ฉันใช้ PowerShell Plus ของ Idera และผู้ดูแลระบบซึ่งอนุญาตการดีบักและค่อนข้างเท่ห์

ฉันสามารถหย่านมตัวเองจาก VB ได้ค่อนข้างดี

โครงการที่ใหญ่ที่สุดของฉันในปัจจุบันพร้อม POSH คือการใช้ "powershellASP" เพื่อสร้างหน้าเว็บพื้นฐานที่รันคำสั่ง powershell และดึงโฮสต์ vmware และข้อมูล VM จากโฮสต์ VMWare ESXi (ฟรี) มากกว่าสิบโหลของฉันและแสดงในตาราง HTML ฉันทำสิ่งนี้เพราะด้วย VMWare ESXi ฟรีและไม่มีศูนย์เสมือนไม่มีวิธีอื่นในการรับภาพรวมเรียลไทม์ของ VMs ทั้งหมดของฉันใน บริษัท PowershellASP เป็นโปรแกรมวิเคราะห์คำฟรีสำหรับบุคคลที่สามที่เขียนขึ้นสำหรับ IIS และไม่รองรับโดย MS ดังนั้นจึงสามารถทำสิ่งที่ จำกัด ได้ในตอนนี้และเอกสารค่อนข้างเบาบาง


มี PowerGUI และในการใช้งาน PowerGUI ScriptEditor.exe ฉันไม่สามารถจินตนาการว่าฉันสามารถอยู่ได้โดยปราศจากว่า ...
นิโคลัส Dorier

Powershell 2 มี Powershell ISE ที่ยอดเยี่ยม (Integrated Script Editor) CTP 3 มีวางจำหน่ายแล้ว RTM เปิดให้บริการแล้วในเดือนตุลาคม 2552
Precipitous

1

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

สคริปต์ทั่วไป:

  1. รับพื้นที่ว่างในดิสก์ / RAM, และอื่น ๆ
  2. Query WMI สำหรับข้อมูล BIOS, รุ่นของเซิร์ฟเวอร์, เป็นต้น
  3. ตรวจสอบเวอร์ชั่น AV และตรวจสอบให้แน่ใจว่ามีรายการรีจิสตรี
  4. ตรวจสอบการแชร์บนเซิร์ฟเวอร์ Windows

สคริปต์ผู้ใช้:

  1. ระบุโฆษณาที่ดึงดูดผู้ใช้ทั้งหมดและกลุ่มที่พวกเขาอยู่นั้นเขียนไปยัง Excel หรือ CSV
  2. ค้นหาผู้ใช้ที่ล็อกออนผ่านทาง TS และบนคอนโซล

ฉันมีเครื่องหนึ่งที่ระบุ VMWare guest machines ทั้งหมดบนเซิร์ฟเวอร์ ESX ของฉัน

ฉันมีสคริปต์ที่คว้าไฟล์หลังจาก x วันและลบอย่างปลอดภัย

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

นั่นคือสิ่งที่ฉันสามารถคิดออกจากหัวของฉัน เครื่องมือที่ฉันเลือกคือ PowerShell ในตอนนี้มันทำให้ชีวิตง่ายขึ้น

โดยทั่วไปแล้วมันมีประโยชน์เพียงเล็กน้อยต่อผู้ดูแลระบบเช่นเดียวกับการใช้สคริปต์ Bash กับผู้ดูแลระบบ Unix


0

ฉันกำลังดู poweshell เพื่อแทนที่สคริปต์ชุดลูกค้าของเรา - รันโปรแกรมเข้าสู่ระบบสคริปต์ ฯลฯ

แต่พบว่ามันเพิ่มเวลาเข้าสู่ระบบอย่างน้อย 10 วินาทีนั่นคือ "tweaks" ทั้งหมด จบลงด้วยการอยู่กับสิ่งที่เราใช้


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

0

ไม่ใช่นักพัฒนา. NET ฉันมีข้อ จำกัด ในการใช้งานสำหรับสินค้าที่เกี่ยวข้องกับ. NET ทั้งหมดที่ PS ให้คุณใช้ อย่างไรก็ตามในฐานะผู้ดูแลระบบ Exchange (เหนือสิ่งอื่นใด) การรวม PowerShell สำหรับ Exchange 2007 นั้นยอดเยี่ยมมาก ในที่สุดฉันก็มีเครื่องมือสร้างสคริปต์ที่เชื่อถือได้สำหรับระบบอีเมลของฉัน จนถึงตอนนี้ฉันได้รับมันส่งสถิติรายเดือนให้ฉันในกล่องจดหมายของทุกคนปรับที่อยู่อีเมลต่าง ๆ ที่ได้รับมอบหมายขึ้นอยู่กับเวลาของวันสร้างและกำหนดสิทธิ์ในโฟลเดอร์สาธารณะและผู้ใช้ที่สมดุลภาระอัตโนมัติระหว่างฐานข้อมูลกล่องจดหมาย . อีกสิ่งที่ยอดเยี่ยมจากมุมมอง Ex07 คือหลังจากที่คุณทำอะไรใน GUI มันจะแสดงคำสั่ง PowerShell ที่เกี่ยวข้องสำหรับสิ่งที่คุณเพิ่งทำ คัดลอกสิ่งเหล่านั้นและในที่สุดคุณจะมีชุดของสคริปต์ PS ที่สามารถ rebuld สภาพแวดล้อมการแลกเปลี่ยนของคุณตั้งแต่เริ่มต้น


0

ทำสิ่งต่าง ๆ โดยอัตโนมัติด้วยการตรวจเซิร์ฟเวอร์ที่ฉันทำงาน (รวบรวมข้อมูลพื้นฐานจาก WMI และรวบรวมข้อผิดพลาดและคำเตือนจากบันทึกเหตุการณ์)

การจัดการบันทึกเหตุการณ์มันยอดเยี่ยมมาก

ฉันเพิ่งเขียนสคริปต์เพื่อปิดใช้งานป๊อปอัปการอัปเดตอัตโนมัติที่ Foxit Reader เปิดใช้งานตามค่าเริ่มต้นทั่วทั้งโดเมนที่สคริปต์นั้นทำงานอยู่ มันดึงรายชื่อคอมพิวเตอร์จาก AD จากนั้นทำการทดสอบเพื่อดูว่ามันเพิ่มขึ้นหรือไม่จากนั้นจะเปลี่ยน 1 เป็น 0

สิ่งหนึ่งที่ฉันลืม!

คุณมีสิทธิ์เข้าถึงไลบรารี. NET อย่างสมบูรณ์ มันเป็นความเจ็บปวดเล็กน้อยที่จะทำสิ่งที่ซับซ้อนด้วย แต่ถ้าคุณมีความต้องการมันอยู่ที่นั่นเพื่อคุณ


0

เราใช้มันสำหรับงานผู้ดูแลระบบไม่กี่รายซึ่งเป็นร้านค้าส่วนใหญ่ของ Microsoft สคริปต์บางตัวนั้นเรียบง่ายเช่นการล้างไฟล์เก่าหรือจัดเรียงข้อมูลเครื่องและบันทึกผลลัพธ์ หนึ่งสคริปต์ตรวจสอบคอมพิวเตอร์โดยใช้ WMI เป็นส่วนใหญ่และบันทึกผลลัพธ์ในฐานข้อมูล มันได้รับสิ่งต่าง ๆ เช่นฮาร์ดแวร์ (CPU, RAM, ไดรฟ์ ฯลฯ ) ข้อมูลเครือข่ายผู้ใช้ในท้องถิ่นซอฟต์แวร์ที่ติดตั้งและข้อมูลโปรไฟล์ มีสิ่งหนึ่งที่เรียกว่าบริการเว็บเพื่อส่งอีเมล ฉันคิดว่าในอนาคตจะแทนที่สคริปต์VBScript ที่เหลือซึ่งยังคงใช้งานอยู่ เรายังไม่ได้ใช้งานกับงาน Exchange หรือ SQL Server

ฉันตั้งตารอรุ่นถัดไปซึ่งจะรองรับงานแบ็คกราวน์ธุรกรรมการจัดการข้อยกเว้นที่ดีกว่า ISE ใหม่ (Integrated Scripting Environment) การดีบักที่ดีขึ้น ฯลฯ


0

ผู้ดูแลระบบ Windows ของฉันยังไม่ได้ใช้ PowerShell พวกเขาทุกคนได้ยินเรื่องนี้ แต่พวกเขาไม่ได้ใช้เวลาทำความคุ้นเคยกับมัน

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

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

ในด้านลบพวกเขาไม่ได้ใช้ประโยชน์จากคำสั่ง Unix shell มากนัก ดังนั้นช่วงการเรียนรู้จึงสูงชันโดยไม่จำเป็นและไม่ช่วยให้ผู้คนย้ายจาก Unix ไปยัง PowerShell หรือในทางกลับกันได้ง่าย ส่วนใหญ่ที่พวกเขาทำคือการกำหนดนามแฝงสำหรับ PowerShell cmdlet บางส่วนเช่นls aliasing Get-ChildItemโดยที่สวิตช์บรรทัดคำสั่งทั้งหมดนั้นแตกต่างกัน

แค่สองเซ็นต์ของฉัน ...


0

นี่เป็นคำตอบสำหรับนักพัฒนาซอฟต์แวร์มากกว่า แต่เป็นโลกแห่งความจริงและเราจะเริ่มทดสอบในอีกไม่กี่เดือนข้างหน้า ฉันเริ่มเรียนรู้ PowerShell เพื่อเขียนสคริปต์เพื่อให้งาน SQL Server เข้าสู่สภาพแวดล้อมการรวมระบบอย่างต่อเนื่องของเรา สคริปต์บูรณาการอย่างต่อเนื่องจะถูกเรียกใช้เป็นหลักโดยNAntและMSBuildผ่านJetBrains TeamCity

นอกจากนั้นฉันกำลังดูที่การสลับไปยัง PowerShell เป็นเชลล์คำสั่งหลักของ Windows สำหรับวัตถุประสงค์ทั่วไปและโดยเฉพาะอย่างยิ่งสำหรับงานการจัดการฐานข้อมูล SQL Server

ขออภัยฉันยังไม่มีตัวอย่างรหัสใด ๆ ที่จะแชร์เพราะฉันยังเรียนรู้อยู่! ฉันยินดีที่จะโพสต์บางอย่างเมื่อฉันทำ :)

นี่คือตัวอย่างรหัสบรรทัดเดียวที่ฉันเพิ่งตอบคำถามของคุณอีกด้วย :) แต่เดี๋ยวก่อนสำหรับ wiki ...

จะแสดงรายการโปรแกรมแก้ไขด่วนที่ติดตั้ง:

Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix

ไชโยสำหรับ PowerShell แย่เกินไปที่จะไม่ติดตั้งตามค่าเริ่มต้นบนเซิร์ฟเวอร์ 2003 ที่ตั้งรีจิสทรีช่วยแม้ว่า!
Nick Kavadias

0

ในขณะที่มันไม่ได้เป็นภาษาสคริปต์ที่ง่ายที่สุดในการรับ (ประสบการณ์ที่มั่นคงกับท่อสันนิษฐาน) และมีการใช้ประโยชน์ของตัวเองของแปลกประหลาด (ให้ฉันง่าย sedเหมือน thingy !!) ผมพบ PowerShell มีประสิทธิภาพมาก ไม่ถึงระดับของBashหรือ Unix shell อื่น ๆ แต่ยังคงอยู่

ฉันใช้มันเพื่อควบคุมการส่งออกและนำเข้าฐานข้อมูลบางอย่างด้วยคำเตือนทางอีเมลในกรณีที่สิ่งเลวร้ายและดำเนินการแบทช์ตามปกติ

แน่นอนว่ามันเป็นเชลล์ Windows หลักของฉันอยู่แล้วถึงแม้ว่ามันจะไม่ใช่สิ่งที่ "เขียนน้อยลงทำมากกว่า" PowerShell มี verbosity (และ. NET สืบทอด) ที่เล่นกับมัน


0

PowerShell เวอร์ชัน 1.0 มีข้อ จำกัด อย่างมากในหลาย ๆ ด้าน แต่รุ่น 2.0 นั้นมาพร้อมกันอย่างดี เมื่อเทียบกับชุดสคริปต์มันมีประสิทธิภาพมากขึ้น ฉันไม่ได้ใช้มันเป็นเชลล์สำหรับสคริปต์เท่านั้นดังนั้นประสบการณ์ของฉันจึงมีสีตามนั้น ฉันไม่ชอบซินแท็คซ์ ( -eqvs ==, -gtvs >, ฯลฯ ) แต่ฉันซาบซึ้งในความสามารถที่จะเข้าสู่. NETหากฉันต้องการทำอะไรแปลก ๆ ฉันคิดว่าโดยรุ่น 3.0 มันจะดี ตอนนี้ฉันจะใส่ไว้ในหมวดของ "ทำให้งานสำเร็จ"

ฉันใช้เป็นหลักสำหรับการปรับใช้รหัสโดยอัตโนมัติ นี่คือพื้นที่ที่มันส่องแสงสร้างสิ่งใน C # การดำเนินการที่เกี่ยวข้องกับเชลล์เช่นการคัดลอกไดเรกทอรีซ้ำและสิ่งอื่น ๆ ที่ Scashters Bash ได้รับอนุญาตมานานหลายปีทำให้สิ่งต่าง ๆ ง่ายขึ้นมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.