2017-02-20 11 views
0

ネットワーク共有上のファイルを閉じるスクリプトがあります。PowerShellでネットファイルの呼び出しに負の数値を渡す方法

このように負のファイルIDが-335362046になると、myコマンドはもう動作しません。

私はPowerShellが数値が最初に-のためにパラメータであると思うと思います。正と負の両方の番号で通話をするには、どうすればこの問題を適切に回避できますか?

net files $_.ID /close > $null 
+1

"PowerShellは数値がパラメータであると思うと思います*" - あなたは簡単に 'mkdir -1'と' cd -1'を問題なく使うことができますし、意味がありません変数* value *をそのようなパラメータ名に変換することになります。あなたは 'netファイル" $($ _。ID) "/ close'を試して、PSが文字列として見えるようにすることができますが、'> $ null'を取り除くとエラーが発生する可能性が非常に高くなります次に、推測の代わりに実際に何が間違っているのかを調べる。 – TessellatingHeckler

答えて

4

ファイルIDにはマイナス記号を使用できません。 uint32を使用する必要があるときに、ファイルIDをリストするソフトウェアがint32(符号付き整数)を表示しているため、左(32ビット目)のビットの値1は、2147483648の代わりに負の数になります。あなたはそれを変換する必要があり

は、例:

function closefilehandle ($id) { 
    Write-Host "ID = $id" 

    #If negative id, convert to uint32 
    if($id -lt 0) { $id = [uint32]("0x{0:x}" -f $id) } 

    Write-Host "Closing handle $id" 
    net files $id /close 

} 

closefilehandle -id (-335362046) 

出力:

ID = -335362046 
Closing handle 3959605250 
There is not an open file with that identification number. 

More help is available by typing NET HELPMSG 2314. 

出力はエラーですが、負のidはあなたの構文を与えるだろうとして、それは、エラーの右のようなものですエラー。

関連する問題