従来のプログラムは、C:\Temp\*\FileToRemove.txt
またはC:\Windows\Temp\*\FileToRemove.txt
内の2つの場所のいずれかにファイルを作成しました。ファイルにはネットワークにアクセスできないデータが含まれているため、このファイルをネットワーク上のコンピューターから削除する必要があります。 。
私はこの変更されたスクリプトを1つの場所で実行しようとしていますが、ファイルは検出されますが、期待どおりにファイルが削除されません。
function delete-remotefile {
PROCESS {
$file = Get-ChildItem -Path C:\Temp\* -Include FileToRemove.txt -Recurse
if (Test-Path $file -PathType Leaf)
{
echo "file exist"
Remove-Item $file -Force
echo "file deleted"
}
}
}
Get-Content C:\Computers.txt | delete-remotefile
ファイルがない場合、このスクリプトをエラーなしで完了するにはどうすればよいですか?
あなたのシステムがそのように到達可能であるとあなたが言ったので、私はUNCパスを使いました。検索するパスがリストされていることに注意してくださいc$\temp
コマンドラインでアドレス指定するのと同じように。
何も削除しませんでした。必要に応じて追加できると思います。
コードはかなりよくコメントされているようですが、質問がある場合は...質問してください。 [ニヤリ]
# save the Verbose setting
$Old_VPref = $VerbosePreference
# enable display of Write-Verbose
$VerbosePreference = 'Continue'
#region >>> fake reading in a list of computers
# in real life, use Get-Content
$ComputerList = @'
LocalHost
10.0.0.1
127.0.0.1
BetterNotBeThere
'@ -split [System.Environment]::NewLine
#endregion >>> fake reading in a list of computers
$RootDirList = @(
'c$\temp'
'C$\Windows\Temp'
)
$FileToFindList = @(
# when ready to do this for real,
# put your real file name on the next line
#'FileToRemove.txt'
# then remove or comment out the two fake ones below
'ThisIsTheOne.txt'
'Not_There.txt'
)
$NotFound = '__FileNotFound__'
$NoResponse = '__No_Response__'
$Results = foreach ($CL_Item in $ComputerList)
{
Write-Verbose ('Checking {0} ...' -f $CL_Item)
if (Test-Connection -ComputerName $CL_Item -Count 1 -Quiet)
{
foreach ($RDL_Item in $RootDirList)
{
foreach ($FTFL_Item in $FileToFindList)
{
$GCI_Params = @{
Path = '\\{0}\{1}' -f $CL_Item, $RDL_Item
Filter = $FTFL_Item
Recurse =$True
File = $True
ErrorAction = 'SilentlyContinue'
}
$FileInfo = Get-ChildItem @GCI_Params
$IsThere = [bool]$FileInfo
if ($IsThere)
{
$FoundPath = $FileInfo.FullName
}
else
{
$FoundPath = $NotFound
}
[PSCustomObject]@{
ComputerName = $CL_Item
FileName = $FTFL_Item
RootDir = $RDL_Item
IsThere = $IsThere
FoundPath = $FoundPath
}
} # end >>> foreach ($FTFL_Item in $FileToFindList)
} # end >>> foreach ($RDL_Item in $RootDirList)
}
else
{
Write-Warning (' {0} did not respond.' -f $CL_Item)
[PSCustomObject]@{
ComputerName = $CL_Item
FileName = $NoResponse
RootDir = $NoResponse
IsThere = $NoResponse
FoundPath = $NoResponse
}
} # end >>> if (Test-Connection -ComputerName $CL_Item -Count 1 -Quiet)
} # end >>> foreach ($CL_Item in $ComputerList)
# restore old verbose pref
$VerbosePreference = $Old_VPref
# show on screen
# pipe this to Export-Csv if you want to save the info
$Results
スクリプト実行中の出力.。
VERBOSE: Checking LocalHost ...
VERBOSE: Checking 10.0.0.1 ...
WARNING: 10.0.0.1 did not respond.
VERBOSE: Checking 127.0.0.1 ...
VERBOSE: Checking BetterNotBeThere ...
WARNING: BetterNotBeThere did not respond.
スクリプトの最後にある$ Resultsの切り捨てられた出力.。
ComputerName : LocalHost
FileName : ThisIsTheOne.txt
RootDir : c$\temp
IsThere : True
FoundPath : \\LocalHost\c$\temp\KSN_TestRootDir\ThisIsTheOne.txt
ComputerName : LocalHost
FileName : Not_There.txt
RootDir : c$\temp
IsThere : False
FoundPath : __FileNotFound__
ComputerName : LocalHost
FileName : ThisIsTheOne.txt
RootDir : C$\Windows\Temp
IsThere : True
FoundPath : \\LocalHost\C$\Windows\Temp\KSN_TestDir_Level_1\KSN_TestDir_Level_2\ThisIsTheOne.txt
ComputerName : LocalHost
FileName : Not_There.txt
RootDir : C$\Windows\Temp
IsThere : False
FoundPath : __FileNotFound__
ComputerName : 10.0.0.1
FileName : __No_Response__
RootDir : __No_Response__
IsThere : __No_Response__
FoundPath : __No_Response__
[*...snip...*]
ComputerName : BetterNotBeThere
FileName : __No_Response__
RootDir : __No_Response__
IsThere : __No_Response__
FoundPath : __No_Response__