PowerShell? Bạn có dùng nó không? Bạn có thể chỉ cho tôi một số điều quản trị hệ thống tuyệt vời mà tôi có thể làm với nó không? [đóng cửa]


45

Tôi tiếp tục đọc ở khắp mọi nơi rằng PowerShell là con đường của tương lai. Khi nó được phát hành lần đầu tiên, tôi đã thực hiện một loạt các phòng thí nghiệm ảo, nhưng kể từ đó tôi vẫn không sử dụng nó trong môi trường sản xuất. Tôi biết ngày sẽ đến khi tôi giao dịch với HĐH, nơi nó đã được cài đặt, vì vậy tôi muốn sẵn sàng.

Tôi muốn biết:

  1. Bạn có dùng nó không?
  2. Quá trình 'bootstrapping' của bạn là gì khi sử dụng PowerShell?
  3. Những loại nhiệm vụ quản trị hệ thống mà bạn đã viết kịch bản với nó?
  4. Tôi là quản trị viên cơ sở dữ liệu SQL Server. Một số điều thú vị để làm với nó là gì?

Dường như mọi người đều đồng ý rằng Microsoft đang thúc đẩy điều này, nhưng chưa có ai thực sự sử dụng nó. Tôi muốn nghe từ các quản trị viên hệ thống đang sử dụng nó để thực hiện các nhiệm vụ hàng ngày và chia sẻ một số mẫu mã.


JScript đã chết?
Sophie Alpert

7
Cố gắng không trở thành một kẻ troll với tiêu đề sai lệch của bạn vào lần tới.
Jaykul

Có lẽ bởi vì đôi khi tôi ước nó sẽ biến mất như jscript. Chỉ có tôi hay nó rất xấu xí và dài dòng?
Nick Kavadias

Câu trả lời:


34

Microsoft đang làm tất cả những gì có thể để biến PowerShell trở thành sự lựa chọn của người viết quyền lực và nhà văn tự động hóa ở khắp mọi nơi. Đã qua rồi thời của việc biên dịch mã trong .NET để làm điều tương tự, bây giờ bạn chỉ cần notepad.exe và google. Chúng tôi là những người hâm mộ lớn trong văn phòng, đặc biệt là vì Bảng điều khiển quản lý của Exchange 2007 KHÔNG bao gồm mọi thứ bạn có thể làm trong PowerShell. Microsoft đã cố tình thất bại trong việc thực hiện những điều chỉ được thực hiện một lần trong một thời gian dài, dễ dàng phát triển theo cách đó, điều này hoàn toàn buộc sử dụng nó nếu bạn có bất cứ điều gì tương tự như một môi trường phức tạp.

Quản lý thế hệ sản phẩm mới hơn của Microsoft (Win7, Windows Server 2008, Exchange 2007/2010, SQL Server 2008) đều có các móc PowerShell rất phong phú. Khi Remote Powershell (PowerShell 2.0 IIRC) được triển khai với Server 2008 R2, nó sẽ trở nên hữu ích hơn nữa đối với các nhà văn tự động hóa.

Những gì chúng tôi đã làm với nó:

  • Tạo một trang web để ủy quyền một số nhiệm vụ quản trị viên cho người dùng trợ giúp. Trang web kích hoạt các lệnh được thực thi trong PowerShell. Những việc nó làm:
    • Tạo và xóa tài khoản người dùng, bao gồm cung cấp hộp thư Exchange 2007 và thư mục chính
    • Mở khóa tài khoản
    • Tạo / xóa nhóm
    • Thêm / xóa người dùng khỏi nhóm
    • Di chuyển người dùng giữa các cửa hàng thư
    • Đặt mật khẩu
  • Lấy các trích xuất từ ​​hệ thống ERP và đẩy dữ liệu sổ địa chỉ toàn cầu vào Active Directory hàng đêm.
  • Giải quyết vấn đề LegacyExchangeDN đã xảy ra với quá trình di chuyển Exchange 2003 sang Exchange 2007 của chúng tôi. Phải thêm địa chỉ X500 cho mọi người đã từng sử dụng trên Exchange 2003. Một tập lệnh PowerShell khá ngắn đã sửa nó.
  • Tạo kịch bản "hộp thư nhóm" (hộp thư chung trong Exchange nơi nhiều người dùng có quyền truy cập vào hộp thư), một quy trình thủ công khác do tính chất của dữ liệu chúng tôi cần trước khi khởi động. Nó tiêu chuẩn hóa rất nhiều việc thiết lập các hộp thư này.
  • Tạo một tập lệnh đi qua tất cả các máy có tên miền đặt lại khóa đăng ký cụ thể và khởi động lại dịch vụ. Phải mất 18 giờ để hoàn thành, nhưng nó đã hoàn thành công việc.

Vì vậy, vâng, PowerShell sẽ ở với chúng tôi khá lâu.

EDIT : Thêm một mẫu mã, vì nó được yêu cầu

$ list = import-csv ("groupusers.csv")
$ lastseengroup = $ list [0] .group
$ ADgroupPrefix = "grp.netware."
$ ADgroupSuffix = "{đã xử lý lại - theo định dạng, ou = nhóm, dc = domain, dc = domain, dc = domain}"
Danh sách thành viên rõ ràng
Những ẩn số rõ ràng
foreach (mục nhập $ trong danh sách $) {
    if ($ ($ entry.group) -ne $ lastseengroup) {
        echo "tình cờ gặp nhóm mới $ ($ entry.group), cam kết thay đổi thành $ lastseengroup"
        $ newgroup = $ ADgroupPrefix + $ Lastseengroup
        $ newgroupdn = '"' +" cn = $ newgroup $ ADgroupSuffix "+ '"'
        echo "nhận DN cho $ newgroup"
        $ currentgroup = tên miền nhóm DSFery -name $ newgroup
        if (($ currentgroup -ne $ null)) {
            nhóm dsmod $ newgroupdn -chmbr $ thành viên
        } khác {
            nhóm DSadd $ newgroupdn -scope u -secgrp yes -members $ Memberlist -desc "Nhóm được nhập từ eDirectory"
        }
        Danh sách thành viên rõ ràng
    }
    $ User = get-user $ ($ entry.member) -ErrorAction SilentlyContinue
    if ($ User.isvalid) {
        $ UserDN = $ User.distinguishedname
        $ thành viên = $ danh sách thành viên + '"' +" $ UserDN "+ '"'
    } khác {
        $ unknownusers = $ unknownusers + $ ($ entry.member)
    }
    $ lastseengroup = $ ($ entry.group)

}
nhóm DSadd "cn = $ ADgroupPrefix $ lastseengroup $ ADgroupSuffix" -scope u -secgrp yes -members $ thành viên

Thao tác này sẽ lấy tệp CSV được tạo bằng tập lệnh perl và cập nhật một nhóm các nhóm. Nếu nhóm đã tồn tại, nó sẽ thay thế thành viên bằng nhóm được chỉ định trong tệp. Nếu nhóm không tồn tại, nó tạo ra nó. Đây là đồng bộ một chiều. Ngoài ra, không hoàn toàn trong sản xuất, nhưng gần.


6
quyền hạn từ xa !! ý bạn là như ssh!?! khoảng thời gian!
Nick Kavadias

2
Làm thế nào để bạn chạy tập lệnh powershell từ một trang web, bạn có sử dụng tập lệnh powershell làm ngôn ngữ lập trình web không? bạn đang sử dụng powershellASP? bạn đang chạy tập lệnh của bạn với tư cách là người dùng IIS?
quentin

17

Do các sản phẩm máy chủ của Microsoft sẽ được bật PowerShell ngay từ đầu (tôi tin rằng phiên bản Exchange tiếp theo có tất cả cấu hình có sẵn thông qua PowerShell) và những cuốn sách như PowerShell in Practice mô tả một số cách tuyệt vời để tự động hóa các tác vụ đơn điệu khác, tôi nghĩ thật hợp lý khi đề xuất rằng PowerShell sẽ là một công nghệ phổ biến trong máy chủ Windows trong một thời gian nữa.


cuốn sách đó vẫn đang trong giai đoạn thử nghiệm / đang được viết
Nick Kavadias

Vâng, đúng vậy - nhưng bạn vẫn có thể mua ngay bây giờ và có quyền truy cập sớm vào nội dung. Và có hàng tấn công cụ bảo trì máy chủ trong đó :)
moobaa

4
Exchange đã là tất cả PowerShell kể từ Exchange 2007. OCS sẽ hoàn toàn có khả năng PowerShell trong phiên bản tiếp theo; hầu hết các sản phẩm của Trung tâm hệ thống đều hỗ trợ đầy đủ hoặc sẽ trong các phiên bản tiếp theo. PowerShell không đi đâu cả.
paulr

12

Tôi muốn giới thiệu Podcast # 162 của Scott Hanselman . Có vẻ như tất cả các nhóm máy chủ của Microsoft bị "buộc" phải cung cấp các lệnh ghép ngắn PowerShell và cũng phải tuân theo một cú pháp nhất quán, duy nhất.

Ngoài ra, các bên thứ ba như VMWare đang áp dụng nó

Nói tóm lại, tôi tin rằng PowerShell bắt đầu với 2.0 thực sự nghiêm túc trong việc thay thế các tệp bó cho tất cả các tác vụ tầm thường nhất.


10

Mười tập lệnh PowerShell tôi sử dụng làm quản trị viên cơ sở dữ liệu SQL Server (tất cả được mô tả / đăng trên blog của tôi ):

  1. Kiểm tra dung lượng đĩa trên tất cả các Máy chủ SQL và tải dữ liệu vào bảng SQL
  2. Chạy các báo cáo quyền trên tất cả các Máy chủ SQL sản xuất và tải dữ liệu vào cơ sở dữ liệu SQL
  3. Khám phá tất cả các cụm, nút và ảo của Windows Server 2003 trên mạng và tải vào các bảng SQL
  4. Khám phá tất cả các cơ sở dữ liệu trên tất cả các Máy chủ SQL như được định nghĩa trong SCCM và tải vào bảng SQL
  5. Tạo phiếu ghi điểm sao lưu SQL Server bằng cách tải thông tin sao lưu trên tất cả các Máy chủ SQL vào bảng SQL
  6. Xác minh rằng TCP Offload Engine bị vô hiệu hóa trong Windows Server 2003 SP2 (đây là trình diệt hiệu năng cho nhiều Máy chủ SQL)
  7. Xác minh sắp xếp phân vùng đĩa (cũng là kẻ giết hiệu năng nếu các đĩa được căn chỉnh không đúng cách)
  8. Sao chép bảng SQL từ máy chủ này sang máy chủ khác
  9. Recursivley sao chép tất cả các gói SSIS bằng Bộ lưu trữ MSDB từ máy chủ này sang máy chủ khác, bao gồm cả cấu trúc thư mục
  10. Tạo trình xem phụ thuộc đối tượng đồ họa của riêng tôi

8

Những loại nhiệm vụ quản trị bạn đã viết kịch bản với nó?

giám sát ứng dụng / dịch vụ: lấy các số hiệu suất chính ra khỏi (từ xa) EventLog và Thủ tục lưu trữ và hiển thị chúng từ một tệp bó

Tôi là một DBA của SQL Server, hãy chỉ cho tôi một số điều thú vị để làm với nó?

automssqlbackup : sao lưu hàng ngày cho MSSQL với luân phiên (hàng ngày = tăng dần, hàng tuần + hàng tháng = đầy đủ; giữ 5 hàng ngày, 5 sao lưu hàng tuần), nén, thông báo email


+1 để tự động hóa toàn bộ quá trình sao lưu MSSQL.
Andrei Rînea

Đúng ... Powershell là vàng nguyên chất để tự động sao lưu phức tạp trong SQL Server. Chúng tôi sử dụng nó để nén và mã hóa các bản sao lưu hàng giờ và sau đó gửi các tệp tới Amazon S3 để lưu trữ ngoại vi: codeblog.theg2.net/2010/02/ trên
Greg Bray

7

Đã sử dụng các tập lệnh shell unix trong một nghề nghiệp trước đó, sau đó chuyển sang quản trị máy chủ windows, tôi có thể nói rằng tôi thực sự, thực sự đánh giá cao powershell - Tôi không có thời gian cũng không có khả năng học quá nhiều cú pháp phức tạp và rất ngạc nhiên rằng rất nhiều của các tập lệnh powershell có thể được viết bằng ngôn ngữ rất đơn giản ... hãy coi đó là giá trị như tôi đã từng sử dụng để ksh !!

Tôi dự đoán nó sẽ tồn tại trong một thời gian dài.


7

Tôi nghĩ điều này thật tuyệt: với SQL Server 2008, bạn có các tiện ích mở rộng PowerShell mới cho phép bạn điều hướng cơ sở dữ liệu SQL giống như hệ thống tệp hoặc sổ đăng ký cục bộ của bạn.

Sau khi cài đặt các công cụ SQL Server Client, bạn có thể mở bất kỳ cơ sở dữ liệu nào trong PowerShell (thông qua menu ngữ cảnh nhấp chuột phải) và chơi với nó theo cách hướng đối tượng:

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)}

Lưu ý dòng đầu tiên chỉ đơn giản là thay đổi lời nhắc để nó không quá dài.

Hy vọng rằng ngoài điều đó là hiển nhiên những gì đang diễn ra ở đây :)


+1 Wow, điều này khá hữu ích. Cảm ơn!
jftuga

5

SQL Server 2008 hiện có các tùy chọn ngữ cảnh PowerShell trong Management Studio, do đó, hơn cả Exchange đang nắm lấy nó. Ngoài ra, hãy nghĩ về nó như là sự thay thế cho DOS, vì đó là điều mà MS đã nghĩ rất nhiều vì họ không thể cải thiện tính bảo mật của DOS cho các vấn đề tương thích ngược, vì vậy họ chỉ tạo ra một cái gì đó mới và wammo, đã giải quyết vấn đề!


4

Tôi cũng là một DBA và người viết kịch bản thời gian dài, quay trở lại các tệp bó của DOS, V3.3! Đã chuyển sang VB Script nhưng PS rất mạnh. Hãy xem - Xin lỗi, tôi không thể đăng liên kết, vì tôi là người dùng mới. Nhận cái này từ Blog của Otto Helweg. Nó là một công cụ kiểm kê phần mềm giá rẻ và vui vẻ.

  • 1- Kéo danh sách các máy tính để truy vấn từ bảng cơ sở dữ liệu
  • 2- Thêm dữ liệu hiện tại và thời gian vào kết quả
  • 3- Ghi kết quả kiểm toán vào cơ sở dữ liệu

Ví dụ tập lệnh 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()

Dave J


3

Các tác vụ sau được nhóm của tôi thực hiện một cách thường xuyên với PowerShell

  • liệt kê bộ nhớ khả dụng trên tất cả các nút của cụm Hyper-V của chúng tôi.
  • Quản lý trình quay Netapp
  • Cung cấp máy ảo Hyper-V mới
  • Viết và đọc từ danh sách SharePoint lập trình

Ngày ngày, tôi có một nhắc nhở PS mọi lúc và sử dụng nó cho bất kỳ một nhiệm vụ nào mà tôi đã sử dụng để sử dụng CMD cho.

Dưới đây là một số mẫu mã để đọc Danh sách Sharepoint. Tôi sử dụng các dịch vụ web từ Sharepoint và lệnh ghép ngắn "New-WebServiceProxy" mới trong 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 có một bài đăng blog tuyệt vời về việc sử dụng Sharepoint Web Services mà tôi đã sử dụng làm cơ sở để tạo tất cả các chức năng của mình. He evens có một tập lệnh webservice.ps1 mới tuyệt vời mà bạn có thể sử dụng nếu bạn vẫn đang sử dụng PowerShell V1.

Ngoài ra, đây là hàm cơ bản mà tôi đã sử dụng để lấy bộ nhớ khả dụng trên các nút trong cụm của tôi

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 {}    

}

Có bất kỳ mã mẫu nào bạn muốn chia sẻ? Tôi đặc biệt thích đọc và viết danh sách SharePoint.
Brian

2

Tôi đã thử PowerShell cho một dự án nhỏ tại nơi làm việc - di chuyển hàng ngày một tập hợp con gồm ~ 600 người dùng và ~ 200 nhóm từ AD công ty sang hệ thống UNIX cũ bằng các tệp giống như CSV . Tôi đã được cung cấp một tập lệnh VBScript 500 dòng (!) Rút ra một nhóm duy nhất và người dùng của nó làm điểm bắt đầu.

Hóa ra một kịch bản PowerShell ~ 20 dòng có thể làm toàn bộ ...

Là người dùng * NIX (phía máy chủ và máy khách), tôi đã rất ngạc nhiên với PowerShell. Ngay cả khi bạn chỉ biết một tập hợp nhỏ các lệnh, bạn có thể thực hiện công việc thực sự mạnh mẽ với nó. Tôi chỉ cần truy cập từ xa SSH (giống như) ...


tra cứu psremote
Sam

1

Làm thế nào tôi không thể sử dụng nó? Tất cả các ứng dụng máy chủ của Microsoft sắp ra / đang được nâng cấp hiện được quản lý bằng Powershell. Một số UI hoặc Bảng điều khiển quản lý khó chịu ít nhiều gây phiền nhiễu sau đó được cung cấp bên trên lõi này thường là con chó chậm và như ai đó đã chỉ ra, thiếu các tính năng có sẵn ... vì vậy tôi không thể nói rằng chúng ta thực sự có nhiều sự lựa chọn ^ ^


Kiểm tra tập lệnh powershell nhỏ này để tạo ra các hội đồng của bạn và tăng tốc tất cả các bảng điều khiển dựa trên quyền hạn của bạn: msexchangeteam.com/archive/2008/08/01/449426.aspx
Jesse Weigert

1

Powershell không hoàn hảo nhưng nếu bạn đã sử dụng thì bạn biết nó khá tuyệt. Có quyền truy cập vào toàn bộ thư viện .net cộng với các lệnh ghép ngắn tích hợp (và tạo các lệnh ghép ngắn của riêng bạn bằng PS trong 2.0), điều đó thật tuyệt.

Điều duy nhất tôi nghĩ là thiếu là một IDE tốt cho nó mà tôi chắc chắn sẽ đến từ MS một ngày nào đó. Ngay bây giờ tôi sử dụng powershell plus và adminscriptitor của Idera cho phép gỡ lỗi và khá tuyệt.

Tôi đã có thể loại bỏ VB khá tốt.

Dự án lớn nhất của tôi cho đến nay với posh là sử dụng "powershellASP" để tạo một trang web cơ bản chạy các lệnh powershell và lấy máy chủ vmware và thông tin VM từ hơn một tá máy chủ VMWare ESXi (miễn phí) và hiển thị chúng trong các bảng HTML. Tôi đã làm điều này bởi vì với VMWare ESXi miễn phí và không có trung tâm ảo, không có cách nào khác để có được cái nhìn tổng quan thời gian thực về tất cả các VM của tôi trong công ty. PowershellASP là trình phân tích cú pháp bên thứ 3 miễn phí được viết cho IIS và không được MS hỗ trợ. Vì vậy, nó có thể làm một số điều hạn chế ngay bây giờ và tài liệu khá thưa thớt.


Có PowerGUI và trong powergui sử dụng ScriptEditor.exe, tôi không thể tưởng tượng làm thế nào tôi có thể sống mà không có điều đó ...
Nicolas Dorier

Powershell 2 bao gồm một Powershell ISE (Trình biên tập tập lệnh tích hợp) tuyệt vời. CTP 3 đã có sẵn, RTM có mặt ngay bây giờ, phát hành cuối cùng vào tháng 10 năm 2009.
Kết thúc vào

1

Tôi có cả đống tập lệnh quản lý / kho lưu trữ tìm kiếm thông qua AD cho những thứ khác nhau và truy vấn chúng qua WMI để thống kê quan trọng như chia sẻ trên máy chủ, không gian đĩa, không gian đĩa đã sử dụng, v.v.

Kịch bản chung:

  1. Nhận không gian đĩa miễn phí / đã sử dụng, RAM, v.v.
  2. Truy vấn WMI để biết thông tin BIOS, mô hình máy chủ, v.v.
  3. Kiểm tra phiên bản AV và đảm bảo các mục đăng ký nhất định ở đó
  4. Chia sẻ kiểm toán trên máy chủ Windows

Tập lệnh người dùng:

  1. Liệt kê AD lấy tất cả người dùng và họ thuộc nhóm nào sau đó ghi vào Excel hoặc CSV
  2. Tìm người dùng hiện đang đăng nhập qua TS và trên bảng điều khiển

Tôi có một máy liệt kê tất cả các máy khách VMWare trên các máy chủ ESX của tôi

Tôi có một tập lệnh lấy các tập tin sau x ngày và xóa chúng một cách an toàn.

Về cơ bản tôi có thể làm những gì mất khoảng 200 dòng VBScript và thực hiện trong 10 PowerShell. Bạn cũng có thể làm những thứ bạn không thể làm hoặc làm tốt trong VBScript - như gửi email với tệp đính kèm - điều mà tôi thường xuyên gửi cho tôi kết quả của các tập lệnh của mình. Ngoài ra, bạn có thể viết các mục có ý nghĩa và duy nhất vào nhật ký sự kiện với tên dịch vụ tùy chỉnh và ID sự kiện.

Đó là những gì tôi có thể nghĩ ra khỏi đỉnh đầu của tôi. Công cụ lựa chọn của tôi là PowerShell bây giờ, nó chỉ làm cho cuộc sống dễ dàng hơn.

Về cơ bản, nó rất hữu ích đối với người quản trị hệ thống vì Bash script dành cho quản trị viên Unix.


0

Tôi đã xem xét poweshell để thay thế các tập lệnh bó khách của chúng tôi - chạy chương trình, tập lệnh đăng nhập, v.v.

Nhưng nhận thấy rằng nó đã thêm ít nhất 10 giây để đăng nhập thời gian - đó là với tất cả các "điều chỉnh" tại chỗ. Vì vậy, cuối cùng ở lại với những gì chúng ta đang sử dụng.


Đó không phải là điều nhanh nhất trên thế giới, nhưng nó có thể làm mọi thứ. Nếu tất cả những gì bạn cần làm là ánh xạ một vài ổ đĩa, thì các tập lệnh bó sẽ nhanh hơn.
sysadmin1138

0

Không phải là nhà phát triển .NET, tôi đã hạn chế sử dụng cho tất cả các tính năng liên quan đến .NET mà PS cho phép bạn sử dụng. Tuy nhiên, là quản trị viên Exchange (trong số những thứ khác), tích hợp PowerShell cho Exchange 2007 là TUYỆT VỜI. Cuối cùng tôi cũng có một công cụ kịch bản đáng tin cậy cho hệ thống thư của mình; Cho đến nay, tôi đã nhận được nó gửi cho tôi số liệu thống kê hàng tháng trên hộp thư của mọi người, điều chỉnh những địa chỉ email khác nhau được chỉ định tùy thuộc vào thời gian trong ngày, tự động tạo và gán quyền trên các thư mục công cộng và người dùng cân bằng tải giữa hai DB hộp thư của chúng tôi . Một điều thú vị khác theo quan điểm Ex07 là sau khi bạn làm bất cứ điều gì trong GUI, nó sẽ hiển thị cho bạn các lệnh PowerShell có liên quan cho những gì bạn vừa làm. Sao chép chúng và cuối cùng bạn sẽ có một tập các tập lệnh PS có thể khởi động lại môi trường Exchange của bạn từ đầu.


0

Tự động hóa một số thứ nhất định với kiểm tra máy chủ nơi tôi làm việc (thu thập thông tin cơ bản từ WMI và thu thập các lỗi và cảnh báo từ nhật ký sự kiện).

Nó xử lý Nhật ký sự kiện là tuyệt vời.

Gần đây tôi đã viết một tập lệnh để vô hiệu hóa cửa sổ bật lên tự động cập nhật mà Foxit Reader đã bật theo mặc định trên một tên miền mà tập lệnh đang chạy. Nó lấy một danh sách các máy tính từ AD sau đó kiểm tra xem nó có lên không, sau đó nó thay đổi 1 thành 0.

Một điều tôi quên mất!

Bạn có khá nhiều quyền truy cập đầy đủ vào các thư viện .NET. Đó là một chút đau đớn để làm những thứ thực sự phức tạp với nó, nhưng nếu bạn có nhu cầu, nó sẽ có cho bạn.


0

Chúng tôi sử dụng nó cho khá nhiều nhiệm vụ quản trị viên, chủ yếu là một cửa hàng của Microsoft. Một số tập lệnh rất đơn giản, như dọn dẹp các tập tin cũ hoặc chống phân mảnh máy và ghi lại kết quả. Một tập lệnh kiểm tra các máy tính sử dụng phần lớn WMI và ghi lại kết quả vào cơ sở dữ liệu. Nó nhận được những thứ như phần cứng (CPU, RAM, ổ đĩa, v.v.), thông tin mạng, người dùng cục bộ, phần mềm được cài đặt và thông tin hồ sơ. Có một cuộc gọi dịch vụ web để gửi email. Tôi nghĩ rằng trong tương lai nó sẽ thay thế phần còn lại của các tập lệnh VBScript vẫn đang được sử dụng. Chúng tôi chưa sử dụng nó cho các tác vụ Exchange hoặc SQL Server.

Tôi đang mong chờ phiên bản tiếp theo, sẽ hỗ trợ các công việc nền, giao dịch, xử lý ngoại lệ tốt hơn, ISE mới (Môi trường tập lệnh tích hợp), gỡ lỗi tốt hơn, v.v.


0

Quản trị viên Windows của tôi chưa sử dụng PowerShell. Họ đều đã nghe nói về nó, nhưng họ đã không dành thời gian để làm quen với nó.

Tôi quyết định tự mình xem nó. Đến từ nền tảng shell Unix tôi nghĩ rằng Windows cuối cùng phải có một môi trường lập trình shell thực sự. Tôi nghĩ rằng Microsoft đã làm một số điều tốt với PowerShell và đôi khi không tốt lắm.

Về mặt tốt là việc họ sử dụng các đối tượng làm trung gian giữa các lệnh ghép ngắn trong PowerShell. Điều này mang lại một mức độ sức mạnh cho PowerShell rằng kịch bản dựa trên văn bản phải hack xung quanh để đi làm.

Về mặt tiêu cực, họ thực sự không tận dụng nhiều lệnh shell của Unix. Vì vậy, đường cong học tập dốc không cần thiết và không giúp mọi người dễ dàng chuyển từ Unix sang PowerShell hoặc ngược lại. Phần lớn họ làm là xác định bí danh cho một số các PowerShell cmdlets như ls răng cưa Get-ChildItem với tất cả các dòng lệnh switch là khác nhau.

Chỉ hai xu của tôi ...


0

Đây là nhiều hơn một câu trả lời của nhà phát triển, nhưng đó là thế giới thực và chúng tôi sẽ bắt đầu thử nghiệm điều này tại một số điểm trong vài tháng tới. Tôi đang bắt đầu tìm hiểu PowerShell để viết các tập lệnh để đưa các tác vụ SQL Server vào môi trường tích hợp liên tục của chúng tôi . Các tập lệnh tích hợp liên tục sẽ được NAntMSBuild điều hành thông qua JetBrains TeamCity .

Ngoài ra, tôi đang xem xét chuyển sang PowerShell làm vỏ lệnh Windows chính của mình cho mục đích chung và đặc biệt là cho các tác vụ quản trị cơ sở dữ liệu SQL Server.

Xin lỗi, tôi chưa có mẫu mã nào để chia sẻ, vì tôi vẫn đang học! Tôi sẽ rất vui khi được đăng một số khi tôi làm, mặc dù :)

Đây là một mẫu mã dòng duy nhất mà tôi vừa trả lời một câu hỏi khác của bạn với :) Nhưng này, cho wiki ...

Điều này sẽ liệt kê các hotfix được cài đặt:

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

hooray cho powershell, quá tệ, nó không được cài đặt theo mặc định trên máy chủ 2003. Các vị trí đăng ký đã giúp mặc dù!
Nick Kavadias

0

Mặc dù nó không phải là ngôn ngữ kịch bản dễ dàng nhất để chọn (trải nghiệm chắc chắn với các đường ống được cho là) ​​và có đòn bẩy riêng của nó (cho tôi một thứ đơn giản giống như sed !!), tôi thấy PowerShell khá mạnh mẽ. Không đến mức Bash hoặc shell Unix khác, nhưng vẫn còn.

Tôi sử dụng nó để giám sát một số xuất và nhập cơ sở dữ liệu với các cảnh báo qua email trong trường hợp mọi thứ trở nên tồi tệ và thực hiện một số thao tác hàng loạt thông thường.

Nó chắc chắn đã là vỏ Windows chính của tôi, mặc dù nó không thực sự là loại công cụ "viết ít làm nhiều hơn". PowerShell có tính dài dòng (và kế thừa .NET) chơi với nó.


0

Phiên bản PowerShell 1.0 bị giới hạn rất nhiều về nhiều mặt, nhưng phiên bản 2.0 đang xuất hiện độc đáo. So với các tập lệnh bó, nó mạnh hơn nhiều. Tôi không thực sự sử dụng nó như một cái vỏ, chỉ dành cho các tập lệnh, vì vậy trải nghiệm của tôi được tô màu tương ứng. Tôi không thực sự thích cú pháp ( -eqvs ==, -gtvs >, v.v.), nhưng tôi đánh giá cao việc có thể thả vào .NET nếu tôi cần làm điều gì đó kỳ lạ. Tôi nghĩ rằng bởi phiên bản 3.0, nó sẽ rất tuyệt. Ngay bây giờ tôi sẽ đặt nó chắc chắn trong danh mục "hoàn thành công việc".

Tôi sử dụng nó chủ yếu để tự động hóa việc triển khai mã. Đây là một khu vực nơi nó tỏa sáng trong việc tạo ra một cái gì đó trong C #. Các hoạt động liên quan đến hệ vỏ như sao chép thư mục đệ quy và những thứ khác mà các tập lệnh Bash đã được cấp trong nhiều năm làm cho mọi thứ trở nên dễ dàng hơn nhiều.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.