文件属性
[datetime]$lw = "2021/12/12 22:10:15"
New-Item -Type File -Path t.txt -OutVariable t
$t.LastWriteTime = $lw
$t | gm
属性里带{get,set}的都是可以直接赋值的,直接修改文件属性。
下载文件锁定
Unblock-File <文件名>
代码签名
刚刚的那张图片上的软件无法验证数字签名,在电脑上是不能安装的。我们给它重新签个名。 代码签名证书文档 签名cmdlet.
ls Cert:\CurrentUser\My\ -Recurse -OutVariable c
$c = $c[0]
Set-AuthenticodeSignature -Certificate $c -FilePath <.exe,.dll,脚本文件>
安全要求高的地方,需要CA颁发的管理员证书,签署过的脚本,才能在生产环境执行。
重复文件查找
有一些共享文件夹,时间久了会有很多重复的文件存在。 一个个的比对删除不太现实,要是有点线索处理起来就会快很多了。
[CmdletBinding()]
param (
[Parameter()]
[string]
$FilePath
)
$ht = @{}
$al = New-Object -TypeName System.Collections.ArrayList
$hl = Get-ChildItem -Path $FilePath -Recurse -File | Get-FileHash
foreach($h in $hl){
if($ht[$h.hash]){
$al.add($h)
}else{
$ht[$h.hash] = $h
}
}
$al | export-csv -Path t.csv
思路很简单,获取文件hash值,一个空hash表和一个数组。 把文件hash作为键,条目作为值。如果键存在就把条目存到数组中,最后输出数组到csv文件中。 也可以用数组反查hash表,然后两个数组用hash排序基本上能够数据对齐的去比对重复文件了。获取文件hash的开销有点大,所以性能不太好,夜间没有负载的时候也可以拿来跑跑看。用这个需求练练手也不错,比如说统计下文件类型的总大小,有域环境的统计下每个文件所有者在共享中共使用了多少空间,各种类型的文件是多少。