2011-10-17 29 views

Trả lời

5

Powershell hiện có cú pháp khá rõ ràng, vì vậy không cần nhiều cải tiến.

Một bổ sung mới mà tôi làm như thế là Hash Table as objects, nơi bạn có thể tạo các đối tượng bằng cách thông qua hastable với thuộc tính của nó:

[<ClassName>]$Variable = @{<Property>=<Value>;<Property>=<Value>} 

Vì vậy, cách gọn gàng hơn bản mới hơn của tạo các đối tượng tùy chỉnh là:

$obj = [PSCustomObject]@{a=1; b=2; c=3; d=4} 

Chuyển hướng đã được tăng cường. Giờ đây, bạn có các luồng để tiết, sửa lỗi và cảnh báo ngoài thông thường (đường dẫn) và lỗi và do đó bạn có thể thực hiện chuyển hướng như 5>&1

Bạn có thể sử dụng biến tùy chọn $PSDefaultParameterValues để đặt giá trị tham số mặc định cho lệnh ghép ngắn.

Có là [ordered] gia tốc mới để tạo ra hastable lệnh (từ điển):

$a = [ordered]@{a=1;b=2;d=3;c=4} 

Từ một câu trả lời ở đây trong SO, tôi nhận ra rằng -in là mới trong Powershell v3.0:

Vì vậy, bạn làm điều gì đó như 1 -in 1,2,3. Trước đây chúng ta chỉ có -contains

Cmdlets:

Bạn có thể cập nhật được giúp đỡ với Update-Help cmdlet. Có các lệnh ghép ngắn liên quan đến web như Invoke- WebRequest. Bạn cũng có thể xử lý JSON bằng cách sử dụng các lệnh ghép ngắn ConverTo-JSONConvertFrom-JSON.

+0

"có thể đặt hàng vội vàng (từ điển)": Tôi nghĩ 'từ điển' và 'hashtable' là đồng nghĩa. Có lẽ tôi đang bị nhầm lẫn với Python dicts, nhưng từ điển không áp đặt trật tự, phải không? Bạn có thể làm rõ điều đó không? –

7

Dưới đây là một ví dụ:

dir | where length -lt 10

Trước 3.0, nó đã có

dir | where {$_.length -lt 10}

chỉnh sửa: ví dụ khác, lần này là với foreach-object

dir | foreach-object length

+0

+1 - Thậm chí không nhận thấy điều này trước đây. – manojlds

+0

Tôi đồng ý với người gửi. Đây là một cái gì đó tôi mong đợi để xem một số bài viết về, bởi vì nó làm cho các kịch bản dễ đọc hơn một chút. Tôi không nghĩ tôi thích nó. –

9

Một số lệnh ghép ngắn phổ biến *-Object sử dụng nhiều bộ tham số để thực hiện cú pháp đơn giản. Hãy xem này trong V3:

C:\PS> Get-Command Where-Object -Syntax 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] [-EQ] [<CommonParameters>] 

Where-Object [-FilterScript] <scriptblock> [-InputObject <psobject>] [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CGT [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -LT [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CEQ [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -GT [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLT [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -GE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CGE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -LE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLE [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Like [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLike [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotLike [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotLike [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Match [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CMatch [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotMatch [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotMatch [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Contains [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CContains [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotContains [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotContains [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -In [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CIn [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotIn [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotIn [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Is [<CommonParameters>] 

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -IsNot [<CommonParameters>] 

Chú ý: Kiểm tra các nhà khai thác mới -NotIn-In ví dụ:

C:\PS> 1 -In 1..5 
C:\PS> 10 -NotIn 1..5 

Vì vậy, cú pháp đơn giản là tốt đẹp đối với trường hợp "chung" nhưng xem ra như bạn có thể rơi vào những tảng đá sắc nhọn và dung nham khá dễ dàng ví dụ:

C:\PS> Get-ChildItem | Where LastWriteTime.Year -eq 2010 

Điều này trả về không có gì và thậm chí tệ hơn, không có lỗi, vì vậy cú pháp này không hoạt động như bạn mong đợi. Nghĩa là, bạn không thể truy cập thuộc tính của thuộc tính. Ở trên, PowerShell tìm kiếm một thuộc tính được gọi là LastWriteTime.Year không tồn tại. Cũng cần lưu ý rằng như một phần của cú pháp đơn giản, bây giờ bạn có thể sử dụng $PSItem thay cho $_ trong trường hợp bạn hoặc người viết kịch bản có một số phản ứng dị ứng với $_. :-)

Và trong khi điều này không nhất thiết phải gắn liền với cú pháp đơn giản tôi thấy rằng nó đơn giản hoá cuộc sống của tôi và tôi thích nó:

C:\PS> Get-ChildItem -Directory 
C:\PS> Get-ChildItem -File 
C:\PS> dir -ad 
C:\PS> Get-ChildItem -Attributes System+Hidden+Directory+!Archive 
+0

+1 cho '$ PSItem'. BTW, làm thế nào để bạn biết về những điều này? Toàn bộ tài liệu có được viết không? – manojlds

+1

Vâng, tôi không thích cú pháp đơn giản với vị trí, v.v ... rắc rối nhiều hơn tôi nghĩ. – manojlds

+1

Tôi hơi lo lắng về cú pháp đơn giản. Tôi hiểu mong muốn giúp các quản trị viên dễ dàng truy cập vào PowerShell hơn nhưng tôi không chắc đây là điều gì khác hơn là 'mồi & chuyển đổi'. Thời gian sẽ cho tôi biết. Theo như tìm hiểu về những điều này, là một MVP có đặc quyền của nó. :-) Nghiêm túc, mặc dù sự tương tác giữa nhóm PowerShell và MVP của họ đã khá tốt kể từ khi họ bắt đầu trao MVPs trong PowerShell vào năm 2006. –

Các vấn đề liên quan