2016-07-15 62 views
1

我有一個每小時生成一個文本文件來確定並記錄可用磁盤空間。我在單獨的系統上有一個進程來讀取該文本文件,並確定它是否低於發生預定文件傳輸所需的時間。Powershell - 無法獲取-lt與文本文件中的數字一起使用

問題是-lt語句不是時返回true。我相信這是由於文本文件獲得CRLF添加到最後,但我無法確定。

我試過解析文件,拆分數據。似乎沒有什麼能夠讓25人按預期工作。

在源系統

$disk = ([wmi]"\\localhost\root\cimv2:Win32_logicalDisk.DeviceID='z:'") 
"{0:#.0}" -f ($disk.FreeSpace/1GB),($disk.Size/1GB) | Out-File Z:\FreeSpace\FreeSpace.txt 

遠程系統上的

$Freespace = Get-Content \\Server\Freespace\FreeSpace.txt 
If ($Freespace -lt 25) 
    {<Send Notification> exit} 
Move-Item <Localfile> <Remote Server> 

{$的Freespace -lt 25} 總是返回true。當前值是184.6,所以它不應該如此。

我在這裏不知所措。

回答

2

Get-Content返回一個或多個[string]對象,所以$Freespace現在是一個字符串。

當您試圖在PowerShell中比較兩個不同類型的對象時,所選擇的操作符重載是基於左側參數的類型,然後右側參數被轉換爲相同類型(如果需要)。

實際上,你的if語句現在看起來像這樣的PowerShell:

if("184.6" -lt "25"){ ... } 

比較字符串字典順序(或者,如果你願意字母),並開始與字符1字符串總是前其中一個以2開頭。

轉換的$Freespace變量值的數字類型與+

if(+$Freespace -lt 25){ ... } 
相關問題