我有以下摘錄PowerShell腳本:爲什麼我的PowerShell腳本提示權限添加項目到陣列?
foreach ($pc in $ComputerName) {
$appnames = $appnames | Sort-Object
Write-Debug "Number of entries in `$appnames = $($appnames.count)"
if ($AsHTML) {#Switch Parameter
Write-Verbose "Generating HTML Report..."
$th = "<TR><TH>Application Name</TH>" #Create Top header
foreach ($pc in $ComputerName) {
$th += "<TH>$pc</TH>" #Another header for each pc
}
$th += "</TR>" #Header finished
$rows = ""
foreach ($app in $appnames) {
$rows += "<TR><TH>$app</TH>"
foreach ($pc in $ComputerName) {
Write-Debug $RegistryEntries[$pc].Value[$app]
$currentApp = $RegistryEntries[$pc].Value[$app]
if ($currentApp) {
if ($currentApp.DisplayVersion) {
$status = $currentApp.DisplayVersion
} else {
$status = "Version-nr. N/A"
}
} else {
$status = "Application N/A"
}
$rows += "<TD>$status</TD>" #Intersection cell for each pc
}
$rows += "</TR>"
}
Write-Verbose "Finishing html report..."
$html = "
<html>
<head>
<style>
body { background-color:#FFFFCC;
font-family:Tahoma;
font-size:12pt; }
td, th { border:1px solid #000033;
border-collapse:collapse; }
th { color:white;
background-color:#000033; }
table, tr, td, th { padding: 0px; margin: 0px }
table { margin-left:10px; }
</style>
<Title>Application versions Report</Title>
</head>
<body>
<table>
$th
$rows
</table>
</body>
</html>"
}
}
所以,要解釋一下上面的文字的牆;
- $ RegistryEntries是一個哈希表的哈希表,頂級密鑰是計算機名稱,低級哈希表密鑰是在註冊表的卸載部分找到的應用程序名稱。 Application-name-keys的相應值是具有三個常規屬性的自定義PSObjects:.Displayname,.DisplayVersion和.UninstallString。 (並非所有對象都具有全部三個屬性,但每個對象至少有一個)。
- 我希望用這個HTML表格獲得某種「樞軸表」(參考樞軸表的維基百科條目,但不完全),我可以在Y軸上獲得應用程序名稱,和X軸上的計算機名稱以及所述計算機上所述應用程序的版本號相交。
如此反覆,考慮到這一點,可能有人幫助我瞭解爲什麼我的腳本在運行時會提示我在外殼是否允許應用程序名稱添加到陣列$ appnames(其他地方的腳本),以及對正在放入$ rows的HTML輸入做同樣的事情?
另一件有點偏旁(甚至可能是脫離主題),我的$ RegistryEntries對象,哈希表的哈希表,由於某種原因不能以我在下面兩行執行的方式訪問:
Write-Debug $RegistryEntries[$pc].Value[$app]
$currentApp = $RegistryEntries[$pc].Value[$app]
有沒有人能告訴我爲什麼?
綜上所述/ TL; DR:
爲什麼試圖將項目添加到腳本中創建一個數組時,我的功能提示我的許可,只是這樣做的殼呢?
使用上面描述的自定義對象來保存我想要在我的HTML表格中顯示的數據,我在做什麼錯誤的嘗試訪問它在上面的代碼摘錄?
PS:腳本在這個意義上的作品,如果我坐在遍及所有提示我在shell獲得,創下A +返回的時候,我會得到我想要的那種HTML表格,但應用程序名稱會使計算機名稱間隔的所有單元格都會顯示「應用程序不適用」。
這是對SilentlyContinue。我想這就是標準,我沒有觸及它。 – x10an14 2012-07-05 13:55:23
嗯,我想知道,因爲你提到了提示符,'Write-Debug'和'Write-Verbose'可以這樣做,這取決於'$ * Preference'。 – Joey 2012-07-05 13:56:24
我剛剛設法在shell中重新創建了提示符,並且它發生_after_我有'DEBUG:<我用代碼寫入的文本>' AKA在下一行。 http://imgur.com/gje9R – x10an14 2012-07-05 14:27:09