2017-03-01 123 views
0

我正在爲vCloud Director環境中的VMware DR創建腳本。我有幾個腳本生成不同的csv文件,其中包含我的整個環境。我試圖導入其中一個較大的所有包含CSV文件,以創建一個csv導出文件,其中只包含與特定客戶端VM的名稱列中的三個字母代碼相匹配的行,以及VMXPath中列出的每個數據存儲區上的三個字母代碼列標識存儲是否被複制。包含[]的導入/導出csv

腳本出口目標: 匹配ABC在名稱列,並在VMXPath列要麼NLR或S4R匹配。

例子: 對於下面的示例,我刪除了所有的CSV文件中的其他列的,因爲有很多人,留下兩個欄我嘗試整理/導出根據我的腳本標準。以下是包含在csv中的列標題和示例數據的示例。

"Name","VMXPath" 
"ABC04W09A001 (74342f44-cd05-490e-87bc-3803e8656b33)","[NLR_ABC_DST_505] ABC04W09A001 (74342f44-cd05-490e-87bc-3803e8656b33)/ABC04W09A001 (74342f44-cd05-490e-87bc-3803e8656b33).vmx" 

這是我使用的腳本代碼,它無法生成正確的導出文件。我可以得到它與客戶端ABC匹配,但即使我將該命令剝離爲僅嘗試僅基於VMXPath條件導出時仍然失敗。

$drinventory = Import-Csv C:\reports\dr\co_prod_all_inventory.csv 

    $abcinventory | where {($_.Name -match 「abc」) -and ($_.VMXPath -match "NLR" -or "S4R")} | Export-Csv C:\reports\dr\abc_dr.csv -NoTypeInformation 

我不確定根本原因可能是什麼。我覺得它可能與[]有關,因爲我認爲這是一個數組將包含在?我對PowerShell有點新東西,基本上可以從這個網站/谷歌合作。

任何幫助,你可以提供非常感謝,非常感謝你提前。

ps。我很抱歉,如果這是不正確的格式,以符合本網站的標準。我是新來這裏張貼的東西,我知道虛擬機名稱/ VMXPath信息是一種長...

+0

'「ABC」' - 這些都不是標準的ASCII雙引號。 – wOxxOm

回答

0

在正則表達式

  • [表示開始一個字符類的,所以它必須與匹配時,它會以反斜槓轉義。
  • 錨定在一個模式開始使用^(爲最終一$
  • 否定/逆字符類相同的插入符[^ ]使用(這意味着一切,但有一個空格)
  • |表示模式中的一個或一個條件,它匹配一個或另一個。

因此該腳本正常工作,甚至帶些生成的測試數據:

$drinventory = Import-Csv ".\co_prod_all_inventory.csv" 
$drinventory | 
    where {($_.Name -match "^abc") -and ($_.VMXPath -match "^\[NLR|^\[S4R")} | 
    Export-Csv ".\abc_dr.csv" -NoTypeInformation 
+0

非常感謝你爲我回答這個問題。這正是我所期待的,我的腳本現在完美無瑕。我很感謝你解釋你的改變是如何運作的,就像現在我受到未來教育一樣。再次感謝!! – Jones537