2012-02-07 34 views
13

Tôi muốn kiểm tra xem một biến đã được gán một biến và nếu không thực hiện hành động. Làm thế nào điều này có thể đạt được?powershell kiểm tra một biến chưa được gán cho

Tôi đã thử bằng mã sau nhưng nhận được lỗi: Toán hạng phải của '-is' phải là một loại.

$ ProgramName không được chỉ định tại thời điểm này.

If ($ProgramName -isnot $null) { 
    $ProgramName = $ProgramName + ', ' + $cncPrograms 
} 
Else { 
    If ($cncPrograms -isnot $null) { 
    $ProgramName = $cncPrograms 
    } 
} 

Trả lời

31

Biến bất kỳ chưa gán sẽ có giá trị rỗng, không phải kiểu dữ liệu rỗng. Vì vậy, chỉ cần thực hiện việc này:

If ($ProgramName -ne $null) 

... sẽ trả lại TRUE nếu nó được gán giá trị không null.

Một kiểm tra dễ dàng hơn để làm là

IF($ProgramName) 

nào sẽ kiểm tra nếu đó là $null hay không, mặc dù logic được đảo ngược, vì vậy bạn có thể sử dụng

IF(!$ProgramName) 

Edit:

Ruffin tăng điểm tốt về độ nghiêm ngặt trong nhận xét. Phương pháp này cũng sẽ hoạt động:

Test-Path variable:ProgramName hoặc Test-Path variable:global:ProgramName nếu nó có phạm vi toàn cầu rõ ràng, chẳng hạn. Điều này sẽ trả lại $true hoặc $false tùy thuộc vào biến có tồn tại hay không.

+0

Cảm ơn. Tôi tìm thấy lời giải thích của bạn hữu ích hơn sau khi đọc qua bài báo Andy Arismendi đăng. Nó có ý nghĩa hoàn toàn ngay bây giờ! Cảm ơn vì đăng. – resolver101

+2

Tôi không * nghĩ * làm việc với 'Set-StrictMode -version mới nhất;', đúng không? Làm thế nào bạn nên kiểm tra nó khi chế độ nghiêm ngặt được bật? ** EDIT ** Rõ ràng ['Test-Path biến: toàn cầu: foo '] (http://stackoverflow.com/a/3163008/1028230) – ruffin

+3

@ruffin 'Test-path biến: ProgramName' sẽ trả về' $ true 'or' $ false'. Tốt bắt trên strictmode. Tôi đã thêm vào câu trả lời. – JNK

7

Test-Path variable:\var nên làm những gì bạn muốn, tôi đoán vậy.

+0

Vâng. cũng vậy. Có rất nhiều cách để kiểm tra. IS này không phải là một phương pháp tốt? chỉ hỏi vì bạn đã hoàn thành câu của mình với "tôi đoán". – resolver101

+2

Đây thực sự là câu trả lời đúng. Một cách khác để thực hiện nó là kỹ thuật hack. Đây là cách có lập trình dự định để thực hiện. – ZaxLofful

2

Để xây dựng các câu trả lời (chính xác) từ JNK và David, hãy xem bài đăng trên blog tuyệt vời này từ Jeffrey Snover để hướng dẫn bạn qua tất cả các ca sử dụng biểu thức Boolean trong PoweShell. Nó kết thúc với cách kiểm tra sự tồn tại của một biến.

http://blogs.msdn.com/b/powershell/archive/2006/12/24/boolean-values-and-operators.aspx

+0

Cảm ơn tôi đã đọc qua và có ý nghĩa hơn sau khi đọc các ví dụ. – resolver101

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