2012-01-24 25 views
7

Tôi có một kịch bản PS:Làm thế nào để ngăn chặn PowerShell Get-Content đầu ra

script.ps1

[System.Xml.XmlDocument] $Config; 

function Get-ScriptDirectory 
{ 
    Split-Path $script:MyInvocation.MyCommand.Path 
} 

function Load-Config 
{ 
    $configPath = Join-Path (Get-ScriptDirectory) config.xml 
    $global:Config = [xml](gc $configPath) 
} 

Load-Config 

config.xml

<Configuration> 
</Configuration> 

Sau đó trong kịch bản tôi đang làm việc với Biến $ Config. Khi tôi chạy kịch bản này, nó viết đầu ra cho bàn điều khiển, chứa phần tử gốc của xml. Một cái gì đó như:

Configuration 
-------------- 

Có cách nào ngăn chặn đầu ra này không?

Cảm ơn.

Trả lời

6

Có lẽ đầu ra không phải là do các lệnh gán (một tuyên bố voidable), nhưng do dòng này:

[System.Xml.XmlDocument] $Config;

Trong PowerShell, điển hình , tất cả các câu lệnh trả về một giá trị (ngoại trừ các câu lệnh voidable). Tôi nghĩ rằng lần đầu tiên bạn chạy kịch bản không có đầu ra sẽ được ghi vào bàn điều khiển. Tuy nhiên, các lần chạy tiếp theo $Config sẽ vẫn chứa giá trị của lần chạy trước đó và giá trị của nó sẽ được ghi vào màn hình.

  • đường ống để cmdlet Out-Null: [System.Xml.XmlDocument] $Config | Out-Null
  • đúc để làm mất hiệu lực: [void][System.Xml.XmlDocument]$Config
  • gán đến $ null: $null = $Config
  • hoặc đơn giản là không phải là 'tuyên bố' các $Config biến

là các cách để ngăn chặn hành vi này.

0

Một nơi nào đó bạn đang đổ biến từ tập lệnh của mình. Khi nó rơi ra khỏi đường ống, nó sẽ được chuyển tới Out-Host và điều đó sẽ mang lại kết quả bạn nhìn thấy.

Giải pháp thực tế là đảm bảo bạn không trả lại bất kỳ thứ gì từ tập lệnh của mình. Vì tôi không thể nhìn thấy mã của bạn, tôi không thể trỏ đến đâu, nhưng ở đâu đó có một đường ống hoặc câu lệnh làm rò rỉ đối tượng vào đầu ra. Bạn có chắc là bạn đang sử dụng bài tập ở mọi nơi bạn cần không?

4

Nếu bạn không muốn đầu ra của một lệnh được in ra để giao diện điều khiển, bạn có thể loại bỏ nó bởi ống nó hay chuyển hướng nó để Out-Null. Ví dụ cả hai sẽ làm việc:

$Config | Out-Null 
$Config > Out-Null 

Nếu bạn đã quen thuộc với hệ điều hành Unix-like, Out-Nullkhái niệm tương đương với /dev/null.

+0

Bạn cũng có thể gán cho '$ null'. Trong mọi trường hợp, nó không thực sự giống nhau, như bạn * redirect * làm '/ dev/null' nhưng * pipe * thành' Out-Null'. – Joey

+0

@Joey Đúng, vì '/ dev/null' được biểu diễn dưới dạng tệp. Cảm ơn đã chỉ ra điều đó. –

+0

Tôi đã cập nhật câu hỏi của mình để mô tả mã của tôi tốt hơn. Tôi đã cố gắng cố vấn của bạn, nhưng nó không giúp tôi. Bởi vì khi tôi chuyển hướng đầu ra, biến Config của tôi bị trống trong hàm tiếp theo khi tôi gọi nó. – zosim

0

Một vài tùy chọn:

# Pipe to the Out-Null cmdlet 
$Config | Out-Null 

# Cast to void 
[void]$Config 

# assign to $null 
$null = $Config 

# redirect to $null 
$Config > $null 
Các vấn đề liên quan