2012-01-01 1 views
15

Tôi đã thử kèm theo sau trong một câu lệnh if để tôi có thể thực hiện lệnh khác nếu điều này thành công:Kiểm tra nếu một lệnh đã chạy thành công

Get-WmiObject -Class Win32_Share -ComputerName $Server.name -Credential $credentials -Filter "Description='Default share'" | Foreach-Object { 
     $Localdrives += $_.Path 

nhưng tôi không thể tìm ra cách để làm điều đó. Tôi thậm chí đã cố gắng tạo ra một chức năng nhưng tôi không thể tìm ra cách để kiểm tra xem chức năng đã hoàn thành thành công hay chưa.

Trả lời

10

bạn có thể thử:

$res = get-WmiObject -Class Win32_Share -Filter "Description='Default share'" 
if ($res -ne $null) 
{ 
    foreach ($drv in $res) 
    { 
    $Localdrives += $drv.Path 
    } 
} 
else 
{ 
    # your error 
} 
+0

Bây giờ tại sao tôi không nghĩ về điều này !! Cảm ơn bạn rất nhiều :) – Sune

36

Thử $? biến tự động:

$share = Get-WmiObject -Class Win32_Share -ComputerName $Server.name -Credential $credentials -Filter "Description='Default share'" 

if($?) 
{ 
    "command succeeded" 
    $share | Foreach-Object {...} 
} 
else 
{ 
    "command failed" 
} 

Từ about_Automatic_Variables:

$? 
    Contains the execution status of the last operation. It contains 
TRUE if the last operation succeeded and FALSE if it failed. 
... 

$LastExitCode 
    Contains the exit code of the last Windows-based program that was run. 
+1

Tôi đã chọn giải pháp đầu tiên lần này, nhưng đây thực sự là một cách tuyệt vời để làm điều đó. Cảm ơn một lần nữa Shay :) – Sune

+0

Xin lỗi Shay: Kiểm tra 'get-WmiObject -Class Win32_Share -Filter" Mô tả = 'glurp' "', nhưng trong trường hợp này là $? là đúng và không có chia sẻ với mô tả này. – JPBlanc

+5

Lệnh không trả lại lỗi vì vậy $? được đặt thành $ true. Điều này giống như: dir * .Không có suggExtension, kết quả là không có gì và không được coi là lỗi. Sử dụng giải pháp @ JPBlanc khi bạn muốn kiểm tra xem câu lệnh có trả về bất kỳ kết quả nào không. –