2012-05-23 34 views
12

Đây là một điều kỳ lạ. Thông thường khi tôi thực hiện một lệnh bên ngoài từ PowerShell tôi sử dụng các nhà điều hành & như thế này:Khoảng thời gian '.' điều hành làm trong PowerShell?

& somecommand.exe -p somearguments 

Tuy nhiên, hôm nay tôi đi qua các . điều hành sử dụng như thế này:

.$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd install notepadplusplus 

không thời gian phục vụ mục đích gì trong kịch bản này? Tôi không hiểu.

+0

Khoảng thời gian của bạn cần một khoảng trống sau khi nó hoặc người nào khác nó sẽ làm ".đừng dừng cho một thuộc tính đối tượng" như được đề cập bên dưới. – Vippy

Trả lời

6

Dấu chấm là một nhà điều hành gọi:

$a = "Get-ChildItem" 
. $a # (executes Get-ChildItem in the current scope) 

Trong trường hợp của bạn, tuy nhiên, tôi không nhìn thấy những gì nó làm.

+5

Thuật ngữ Microsoft đặt ra cho điều này là ["Dot Sourcing"] (http://technet.microsoft.com/en-us/library/ee176949.aspx#ECAA). – Filburt

+4

. hoặc & không tạo sự khác biệt cho tệp CMD vì nó thực hiện trong một quy trình riêng biệt (cmd.exe). –

+0

Ý tưởng về tìm nguồn cung ứng dot như thế này là thay đổi phạm vi sao cho các biến được tạo trong một tập lệnh có sẵn trên toàn cầu. Tuy nhiên, như Keith đã nói, các kịch bản lệnh cmd không có quyền truy cập vào phạm vi biến đó, do đó, điều này không thực sự thay đổi bất cứ điều gì. – Loophole

14

Các "" nhà điều hành cuộc gọi sẽ gửi và nhận các biến từ các tập lệnh khác mà bạn đã gọi. Toán tử "&" sẽ CHỈ gửi các biến.

Ví dụ, xem xét sau đây:

Script 1 (call-operator.ps1):

clear 

$funny = "laughing" 

$scriptpath = split-path -parent $MyInvocation.MyCommand.Definition 
$filename = "laughing.ps1" 

"Example 1:" # Call another script. Variables are passed only forward. 

& $scriptpath\$filename 

"Example 2:" # Call another script. Variables are passed backwards and forwards. 

. $scriptpath\$filename 
$variableDefinedInOtherScript 

Script 2 (laughing.ps1):

# This is to test the passing of variables from call-operator.ps1 

"I am $funny so hard. Passing variables is so hilarious." 

$variableDefinedInOtherScript = "Hello World!" 

Tạo cả hai kịch bản và CHỈ chạy cái đầu tiên. Bạn sẽ thấy rằng "." nhà điều hành cuộc gọi gửi và nhận các biến.

Cả hai đều có mục đích sử dụng, vì vậy hãy sáng tạo. Ví dụ: toán tử gọi "&" sẽ hữu ích nếu bạn muốn sửa đổi (các) giá trị của biến trong tập lệnh khác trong khi vẫn giữ nguyên (các) giá trị ban đầu trong tập lệnh hiện tại của mình. Kinda một biện pháp bảo vệ. ;)

+0

Tóm lại, đó là TẤT CẢ về "phạm vi". Đi tới hộp Google và tìm kiếm "phạm vi biến quyền hạn". – Vippy

3

Ngắn: Nó là một toán tử đặc biệt được sử dụng để đạt được những gì nhà khai thác thường xuyên không thể đạt được. Toán tử cụ thể này . thực sự có hai trường hợp sử dụng toán tử đặc biệt khác nhau.

The Long:

Như với bất kỳ ngôn ngữ nào khác, kịch bản hay cách khác, kịch bản PowerShell cũng hỗ trợ nhiều loại khác nhau của nhà khai thác để giúp thao tác giá trị.Những nhà khai thác thường xuyên bao gồm:

  • Arithmetic
  • Phân
  • So sánh
  • logic
  • Redirection
  • List item
  • Split và Tham
  • Loại
  • unary

Tuy nhiên, PowerShell cũng hỗ trợ những gì được gọi là Các toán tử đặc biệt được sử dụng để thực hiện các tác vụ không thể thực hiện được bởi các loại toán tử khác.

Những nhà khai thác đặc biệt Bao gồm:

  • @() điều hành mảng subexpression
  • & Gọi hành
  • [ ] hành Cast
  • , Comma điều hành
  • . Dot tìm nguồn cung ứng vận hành
  • -f Format hành
  • [ ] hành Index
  • | điều hành đường ống
  • . tài sản toán tử tham chiếu
  • .. điều hành Phạm vi
  • :: điều hành viên tĩnh
  • $() hành subexpression

.Nhà điều hành nguồn tìm kiếm: được sử dụng trong ngữ cảnh này để cho phép tập lệnh chạy trong phạm vi hiện tại về cơ bản cho phép bất kỳ hàm, bí danh và biến nào được tạo bởi tập lệnh được thêm vào tập lệnh hiện tại.

Ví dụ:

. c:\scripts.sample.ps1 

Note đó, ứng dụng này của . đặc biệt điều hành được theo sau bởi một không gian để phân biệt nó với (.) biểu tượng đại diện cho thư mục hiện

Ví dụ:

. .\sample.ps1 

.toán tử tham chiếu tài sản: Cho phép truy cập vào các thuộc tính và phương pháp của một đối tượng mà theo . bằng cách chỉ ra rằng sự biểu hiện ở phía bên trái của nhân vật . là một đối tượng và các biểu hiện ở phía bên phải của là một thành viên đối tượng (thuộc tính hoặc phương thức).

Ví dụ:

$myProcess.peakWorkingSet 
(get-process PowerShell).kill() 

Disclaimer & Nguồn:

Tôi có cùng một câu hỏi khi nhìn vào một kịch bản PowerShell rằng tôi đang cố gắng mở rộng trên bộ tính năng của nó và hạ cánh ở đây khi làm nghiên cứu của tôi cho câu trả lời. Tuy nhiên, tôi đã tìm thấy câu trả lời của mình bằng cách sử dụng this tuyệt vời viết trên Mạng phát triển của Microsoft được bổ sung thêm this mở rộng hơn nữa các ý tưởng tương tự từ CNTT Pro.

Chúc mừng.

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