Powershellを使用してファイルを共有するためのクリーンボールをサポートする

各組織には、すべてのユーザーがアクセスできるユーザー間でデータを交換するためのネットワークリソースがあります。 ユーザー自身が「エクスチェンジ」内のフォルダーから一時ファイルを削除せず、リソースがスペースを占有し始めたらどうしますか?



チャレンジ:

1)レベル1までのディレクトリ構造を維持しながら、ネットワーク共有上のユーザーフォルダの自動クリーニング。 リソースのルートには、ユーザー名ごとのフォルダーがあります。

2)昨日のデータを「昨日」フォルダーに保存する(ユーザー権限は「読み取り専用」)。 これは、ユーザーが重要なドキュメントを昨日手に入れるのを忘れた場合です。

3)ログファイルのコピーエラー。 分析用。

4)別のサーバー\フォルダーで使用するためにスクリプトをすばやく再構成する機能。

ソースデータ:

1)// server / obmen上の「Exchange」ネットワークフォルダー、Dを見る:\ obmen

解決策:





PowerShellでは、標準ツールを使用してxml形式を操作できるため、この形式を使用して設定を保存します。



settings.xmlのリスト

<?xml version="1.0"?> <settings> <MainDir>D:\obmen</MainDir> <OldDir> D:\obmen \</OldDir> <NameOldDir></NameOldDir> <ShareName>Obmen</ShareName> <AclDir>D:\acl</AclDir> <service>test_service_1</service> <service>test_service_2</service> </settings>
      
      







clearshare.ps1スクリプトファイルで最初に読むべきことは設定です。

 [xml]$settings = Get-Content D:\ps_project\\settings.xml $mainfolder = $settings.settings.MainDir #    $oldfolder = $settings.settings.OldDir #   $services = $settings.settings.service #,    $ShareName = $settings.settings.sharename #  $NameOldDir = $settings.settings.NameOldDir #   $acldir = $settings.settings.AclDir #   acl
      
      







ファイルの可用性を確保するには、共有リソースを無効にしてすべてのユーザーセッションを閉じます。

 $share = Get-WmiObject Win32_Share | where {$_.name -eq $ShareName} $share.delete()
      
      







サービスを無効にする必要がある場合もあります。 サービスのリストは設定ファイルに記載されていますが、増加する可能性があります。

 stop-service -DisplayName $services
      
      







昨日フォルダーをクリアし、ファイルにエラーを書き込みます。

 Remove-Item "$oldfolder\*" -Recurse -Force 2> "$mainfolder\remove_error_log.txt"
      
      







今日を昨日に移動し、昨日フォルダ自体を除外します。

 Get-ChildItem $mainfolder -Exclude $NameOldDir | Move-Item -destination $oldfolder 2> "$mainfolder\move_error_log.txt"
      
      







ユーザーフォルダー構造を作成します。

 foreach ($foldname in Get-ChildItem $oldfolder | where {$_.Attributes -eq 'Directory'}) { $a = $mainfolder + "\" + $foldname.name; New-Item -type directory -path $a }
      
      







サービスチームをオンにします

 start-service -DisplayName $services
      
      







ボールをオンにする

 $share = [wmiClass] 'Win32_share' $share.Create($mainfolder, $ShareName, "0", "1000")
      
      







参照フォルダーからコピーして、昨日のフォルダーにユーザーの読み取り権限と管理者のFullControlを割り当てます。

 $acl = Get-Acl -path $acldir Set-Acl -Path $oldfolder -AclObject $acl
      
      







そのため、毎晩ユーザーの一時データをクリアし、物忘れの人のためにデータを収集する機会を残すスクリプトを入手しました。 また、コピーエラーを記録し、共有フォルダーに適応するための構成ファイルを持っています。



当然、スクリプトは都合の良いときにタスクスケジューラに追加する必要があります。 (ありがとうame



UPD:フォルダ構造を再構築するプロセスが改善されました。



All Articles