-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFile.txt
69 lines (63 loc) · 2.49 KB
/
File.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# ファイル操作関係
# du -s
# なぜか GnuWin32 の du.exe より格段に速い
ls -Force -Recurse | measure -Sum Length
# Subversion のワーキングコピーのトップディレクトリを探す
# .svn フォルダに I 属性をつけていると Windows Search で見つけにくく
# ワーキングコピーのサブディレクトリもワーキングコピーなので
# トップディレクトリだけを見つけたい
# 使い方の例
# 1. 以下の関数を定義
# 2. Find-SvnWorkingCopy((gi .)) | tee -variable wcs | select fullname
# 3. $wcs 変数に結果が格納されているのであとはご自由に
function Find-SvnWorkingCopy([IO.DirectoryInfo]$d){
try{
$chidDirs = $d.GetDirectories();
}catch{
# Cannot list directory contents
Write-Warning $d.FullName
return;
}
foreach($childDir in $chidDirs) {
if($childDir.Name -eq ".svn") {
echo $d;
# WC's subdirectories are also WCs. No recursive calls required.
return;
}
}
foreach($childDir in $chidDirs) {
Find-SvnWorkingCopy($childDir);
}
}
# 継承されていない ACE をもつディレクトリ・ファイルを探す
# ls -Recurse -Force |? {Has-UninheritedACE($_)} | tee -variable x | select fullname
# ネットワーク越しだと通信量が多いので要改善
# GetAccessControl に引数指定?[Security.AccessControl.AccessControlSections]::Access と指定しても変わらないような
# Enter-PSSession でリモーティング?ただしデフォルトではAdministratorsのみリモーティング可能
function Has-UninheritedACE($info){
try{
$acl = $info.GetAccessControl();
foreach($ace in $acl.Access) {
if(! $ace.IsInherited) {
return $True;
}
}
return $False;
}catch{
Write-Warning $info;
}
}
# カレントディレクトリ直下のファイル・ディレクトリに I 属性を付ける
# attrib.exe /s がなぜかうまくいかないときに用いる
# ls のオプションで -Recurse や -Filter や -Force を使ったり
# パイプで where を挟んだりするのが一般的
ls |% {
$a = $_.Attributes;
if(0 -eq ($a -band [IO.FileAttributes]::NotContentIndexed)) {
$a = $a -bor [IO.FileAttributes]::NotContentIndexed;
$_.Attributes = $a;
}
}
# カレントディレクトリ配下から I 属性を探す
# 実用上では ls に -Recurse や -Force オプションを付けるのが一般的
ls |? { 0 -ne ($_.Attributes -band [IO.FileAttributes]::NotContentIndexed) }