我有以下代码。但是在某处遗漏了{[()]}。我找不到它。 我在'if部分。但我不知道为什么它不起作用 如果有人可以提供小费或其他东西,那么它就会被创造出来。
感谢阅读。
$date = (get-date).AddDays(-1).ToString("yyyMMdd")
$erroractionpreference = "SilentlyContinue"
$Excel = New-Object -comobject Excel.Application
$Excel.visible = $True
$ExcelSheet = $Excel.Workbooks.Add()
$ExcelCell = $ExcelSheet.Worksheets.Item(1)
$ExcelCell.Cells.Item(1,1) = "Machine Name"
$ExcelCell.Cells.Item(1,2) = "Online"
$ExcelCell.Cells.Item(1,3) = "Drive"
$ExcelCell.Cells.Item(1,4) = "Total size (GB)"
$ExcelCell.Cells.Item(1,5) = "Free Space (GB)"
$ExcelCell.Cells.Item(1,6) = "Free Space (%)"
$ExcelCell.cells.item(1,7) = "Used Space (GB)"
$ExcelMakeup = $ExcelCell.UsedRange
$ExcelMakeup.Interior.ColorIndex = 19
$ExcelMakeup.Font.ColorIndex = 11
$ExcelMakeup.Font.Bold = $True
$ExcelMakeup.EntireColumn.AutoFit()
$intRow = 2
$colComputers = get-content "E:\servers.txt"
foreach ($strComputer in $colComputers)
{
$colDisks = get-wmiobject Win32_LogicalDisk -computername $strComputer -Filter "DeviceID ='D:'"
}
foreach ($objdisk in $colDisks)
{
if (Test-Connection -ComputerName $strComputer -Count 1 -Quiet)
$ExcelCell.Cells.Item($introw, 2) = "Online"
$ExcelCell.Cells.Item($intRow, 1) = $strComputer.ToUpper()
$ExcelCell.Cells.Item($intRow, 3) = $objDisk.DeviceID
$ExcelCell.Cells.Item($intRow, 4) = "{0:N0}" -f ($objDisk.Size/1GB)
$ExcelCell.Cells.Item($intRow, 5) = "{0:N0}" -f ($objDisk.FreeSpace/1GB)
$ExcelCell.Cells.Item($intRow, 6) = "{0:P0}" -f ([double]$objDisk.FreeSpace/[double]$objDisk.Size)
$ExcelCell.cells.item($introw, 7) = "{0:N0}" -f ([double]$objDisk.Size/1GB - [double]$objDisk.Freespace/1GB)
else
$ExcelCell.Cells.Item($intRow, 1) = $strComputer.ToUpper()
$ExcelCell.Cells.Item($intRow, 2) = "Offline"
$ExcelCell.Cells.Item($intRow, 3) = "x"
$ExcelCell.Cells.Item($intRow, 4) = "x"
$ExcelCell.Cells.Item($intRow, 5) = "x"
$ExcelCell.Cells.Item($intRow, 6) = "x"
$ExcelCell.cells.item($introw, 7) = "x"
$intRow = $intRow + 1
}
$ExcelMakeup.EntireColumn.AutoFit()
$Excel.ActiveWorkbook.SaveAs("E:\results\" + $date + "_" + (get-date -format "HHmm") + "_D_Drive.xlsx")
$Excel.Workbooks.Close()
$Excel.Quit()
答案 0 :(得分:6)
在PowerShell中,所有if-statements都需要括号来包围它们的主体。以下是演示:
PS > if ($true) write 'true'
At line:1 char:10
+ if ($true) write 'true'
+ ~
Missing statement block after if ( condition ).
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingStatementBlock
PS > if ($true) { write 'true' }
true
PS >
因此,脚本的if语句部分应如下所示:
...
if (Test-Connection -ComputerName $strComputer -Count 1 -Quiet)
{
$ExcelCell.Cells.Item($introw, 2) = "Online"
$ExcelCell.Cells.Item($intRow, 1) = $strComputer.ToUpper()
$ExcelCell.Cells.Item($intRow, 3) = $objDisk.DeviceID
$ExcelCell.Cells.Item($intRow, 4) = "{0:N0}" -f ($objDisk.Size/1GB)
$ExcelCell.Cells.Item($intRow, 5) = "{0:N0}" -f ($objDisk.FreeSpace/1GB)
$ExcelCell.Cells.Item($intRow, 6) = "{0:P0}" -f ([double]$objDisk.FreeSpace/[double]$objDisk.Size)
$ExcelCell.cells.item($introw, 7) = "{0:N0}" -f ([double]$objDisk.Size/1GB - [double]$objDisk.Freespace/1GB)
}
else
{
$ExcelCell.Cells.Item($intRow, 1) = $strComputer.ToUpper()
$ExcelCell.Cells.Item($intRow, 2) = "Offline"
$ExcelCell.Cells.Item($intRow, 3) = "x"
$ExcelCell.Cells.Item($intRow, 4) = "x"
$ExcelCell.Cells.Item($intRow, 5) = "x"
$ExcelCell.Cells.Item($intRow, 6) = "x"
$ExcelCell.cells.item($introw, 7) = "x"
}
...
答案 1 :(得分:2)
您只使用一个 if 语句。 if 的语法如下:
***IF (condition returns true) { action }***
基本上,条件用圆括号表示,而执行块用大括号括起来。
一个简单的例子:
if (1 -eq 1) { Write-host "1 is equal to 1" }
当然,在上面的例子中,条件总是如此。只要返回布尔值(true或false),就可以使用任何条件。
在您的脚本中,在
中if (Test-Connection -ComputerName $strComputer -Count 1 -Quiet)
缺少大括号。你应该在'之后打开括号。 )'在'之前关闭'。之后,请记住将大括号放在' else'相应的声明。
编辑:
iCodez已发布已修复的脚本。 : - )