2017-07-13 16 views
0

ユーザーCドライブで特定のファイル拡張子を検索し、ネットワーク共有にファイルを書き込む場合は、ファイルを書き込みます。ログオンスクリプトから起動したPowershellスクリプトが動作しない

powershell.exe -ExecutionPolicy Bypass -windowstyle hidden -file "\\servername\Path\To\File.ps1"

そして、私のPowerShellスクリプトは次のようになります:

$hostname = HostName 

Get-ChildItem -Path C:\*.* -Filter $file -Recurse -Force -ErrorAction 
SilentlyContinue | Out-File \\servername\Path\To\Results\$hostname\file.txt 

If ((Get-Content "\\servername\Path\To\Results\$hostname\file.txt") -eq $Null) { 

    Remove-Item \\servername\Path\To\Results\$hostname\file.txt 
} 
Exit 

スクリプトも私のマシン上で完全に罰金を実行するスクリプトは、次のように読み込み、ログオンスクリプトの最後の行から起動されますネットワーク共有からロードするときに別のコンピュータが実行されるたびに、アウトファイルが生成されることはありません。そして、私はそれも検索しているとは思わない。

私は間違っていますか?実行ポリシーだと思っていましたが、ログオンスクリプトをバイパスするように設定しました。なぜそれが動作していないのか分かりません。

[編集] 私は今、Windows 10マシンでスクリプトを実行しています。しかし、それは私もPowerShellコマンドプロンプトから

Get-ChildItem C:\*.pst -Recurse

直接実行してみたのWindows 7上でまったく動作しない、とそれだけで静かに失敗し、何を検索しません。 Get-ChildItemはpowershell 1コマンドではありませんか?

+0

ファイルを書いて、その後すぐにそれを削除するのはなぜか? –

+0

ファイルが空の場合にのみファイルを削除します。ウィンドウは隠されていて、スクリプトはユーザーには見えないので、スクリプトが実際に動作していたかどうかを確認する方法が必要でした。 Get-ChildItemが検索している間、txtファイルがフォルダに表示されます。その後、ファイルに何も書き込まれていなければ、ファイルは削除されます。 そのフォルダに残っている唯一のtxtファイルは、私が探しているファイルを持っているユーザーです。 – MustardFacial

答えて

0

こんにちは。このような場合:Get-ChildItem -Path C:*。* -Filter $ file -Recurse - テキストファイルの出力が重くて十分です。 現在の ユーザのネットワークフォルダへのアクセスを確認することができます。アクセスが明示的に設定され、書き込みアクセスが存在する場合は、 ファイルにコンテンツを記録できます。それ以外の場合は、ローカルマシン上にフォルダテスト を作成してファイルを作成し、 にアクセスできないことを示します。どのようにこの方法は次のとおりです。

Set-ExecutionPolicy remotesigned -Scope CurrentUser -Force| Out-Null 

$user = [System.Environment]::UserName 

$hostname = [System.Environment]::MachineName 

try { 
$accs = Get-ACL -Path "\\server\sharedfolder\Results\" 

foreach ($access in $accs) { 

$obj = New-Object -TypeName PSObject -Property @{ 

Access = $accs.Access 

} 

$obj1 = $obj | select -ExpandProperty Access 

for ($i = 0 ; $i -le $obj1.Count ; $i ++) 

{ 

if (!($obj1[$i].IdentityReference -like "*Users*" -or $obj1[$i].IdentityReference -like "*$user*")) { 

if (!(Test-Path "c:\test")) { 

md c:\test 



$s = "user access from group" 

$s | out-file C:\test\ErrInfo.csv 

} 

else { 

$s = "user access from group" 

$s | out-file C:\test\ErrInfo.csv 

} 

} 

if ($obj1[$i].IdentityReference -like "*Users*" -or $obj1[$i].IdentityReference -like "*$user*") { 

if ($obj1[$i].FileSystemRights -like "*ReadAndExecute*") 

{ 

if (!(Test-Path "c:\test")) { 

md c:\test 

$s = "Premission only ReadAndExecute" 

$s | out-file C:\test\ErrInfo_rex.csv 

} 

else { 

$s = "Premission only ReadAndExecute" 

$s | out-file C:\test\ErrInfo_rex.csv 

} 

} 

if ($obj1[$i].FileSystemRights -like "*FullControl*" -and $obj1[$i].AccessControlType -like "*Allow*" -or $obj1[$i].FileSystemRights -like "*Modify*" -and $obj1[$i].AccessControlType -like "*Allow*") 

{ 

if (!(Test-Path "\\server\sharedfolder\Results\$hostname")) 

{ 

md "\\server\sharedfolder\Results\$hostname" 

Get-ChildItem -Path C:\testpatch\*.* -Filter $file -Recurse -Force -ErrorAction SilentlyContinue | Out-File "\\server\sharedfolder\Results\$hostname\file.txt" 


} 

else { 



Get-ChildItem -Path C:\testpatch\*.* -Filter $file -Recurse -Force -ErrorAction SilentlyContinue | Out-File "\\server\sharedfolder\Results\$hostname\file.txt" 


} 


} 

} 


} 

} 
} 

catch { 

if (!(Test-Path "c:\test")) { 

md c:\test 

$s = "--NoAccess--" 

$s | out-file C:\test\ErrInfo_noaccess.csv 

} 

else { 

$s = "--NoAccess--" 

$s | out-file C:\test\ErrInfo_noaccess.csv 

} 

} 

それとも、この(白とびEXIT)のような何かを行うことができます。

Set-ExecutionPolicy remotesigned -Scope CurrentUser -Force| Out-Null 

$hostname = [System.Environment]::MachineName 

if (!(Test-Path "\\server\sharedfolder\Results\$hostname")) { 

md "\\server\sharedfolder\Results\$hostname" | Out-Null 

If ((Get-ChildItem -Path C:\test\*.* -Filter $file -Recurse -Force -ErrorAction SilentlyContinue).Count -ne "0") { 

    Get-ChildItem -Path C:\test\*.* -Filter $file -Recurse -Force -ErrorAction SilentlyContinue | Out-File "\\server\sharedfolder\Results\$hostname\file.txt" 
} 

} 

elseif (Test-Path "\\server\sharedfolder\Results\$hostname") { 

If ((Get-ChildItem -Path C:\test\*.* -Filter $file -Recurse -Force -ErrorAction SilentlyContinue).Count -ne "0") { 

    Get-ChildItem -Path C:\test\*.* -Filter $file -Recurse -Force -ErrorAction SilentlyContinue | Out-File "\\server\sharedfolder\Results\$hostname\file.txt" 
} 

} 
+0

ありがとうございました。私は明日これを試してみる。 誰もがこのフォルダにアクセスできることを知っているので、ネットワークアクセスを確認する必要はありません。企業の全員が読み書きアクセス権を持つパブリックネットワーク共有にあります。 – MustardFacial

+0

@MustardFacial削除のアクセス権はありますか? – TheIncorrigible1

+0

誰もが共有ドライブに対してフルコントロールを持っています – MustardFacial

関連する問題