2016-07-15 6 views
1

空きディスク容量を決定して記録するために、毎時生成されるテキストファイルがあります。私は別のシステム上でそのテキストファイルを読んで、予定されたファイル転送が発生するのに必要なものより少ないかどうかを判断するプロセスを持っています。Powershell - テキストファイル内の数字を扱う-ltを取得できません

-ltステートメントは、そうでない場合にtrueを返すという問題があります。私はそれがテキストファイルがCRLFを最後に追加することによると信じていますが、私は確信が持てません。

私はファイルを解析して、データを分割しようとしました。何も期待通りに動かないようなものはありません。

ソースシステムで

$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> 

常にtrueを返します{$空き領域が25 -lt}。現在の値は184.6です。そうではありません。

私はここに迷っています。

答えて

2

Get-Contentは、[string]オブジェクトを1つ以上返すので、$Freespaceは文字列になりました。

PowerShellで異なる種類の2つのオブジェクトを比較しようとすると、選択された演算子のオーバーロードは左側の引数の型に基づいており、右側の引数は同じ型に変換されます)。 は辞書順(またはアルファベット順あなたがする場合)、および文字1で始まる文字列は、常に前に来る文字列が比較され

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

効果的に、あなたのif文は現在のPowerShellには、このようになります。 1つは2で始まります。

+で数値型に$Freespace変数の値を変換します

if(+$Freespace -lt 25){ ... } 
関連する問題