powershell 练习 -12.28.note
·题目:


1、编写一个PowerShell脚本,用于列出指定目录下的所有文件和子目录。
$file = Read-Host ("请输入你要查看的目录:")
echo (ls $file)2、编写一个PowerShell脚本,用于计算指定目录下所有文件的大小总和。(这里指定的目录我定义为:C:\file)
(1)创建目录和文件:
mkdir c:\file
echo 11111 > c:\file\123.txt
echo 22222 > c:\file\345.txt(2)编写脚本:
# 目录输入 c:\file
$file = Read-Host("请输入你要计算的目录")
$site = 0
ls $file -File | ForEach-Object {
# 使用 ForEach-Object 进行遍历
$site += $_.Length # 截取 Length 字段的内容
}
echo("$file 目录下所有文件总和为:$site")
3、编写一个PowerShell脚本,用于查找指定目录下的所有文件中包含指定字符串的文件。
(1)自己编写:
# 指定字段:password
# $file = Read-Host("请输入你要操作的目录:")
# $txt = Read-Host("请输入你要匹配的字段")
$file = "c:\file"
$txt = "password"
$site = 0
ls $file -File | ForEach-Object {
$aaa = $_.Name
$test = cat $file\$aaa
echo("$aaa 文件中的内容为:
$test")
if ($test.contains($txt)){
echo "" > c:\new.txt
echo $aaa >> c:\new.txt
$new = cat c:\new.txt
}
}
echo("$file目录下 匹配该字符串的文件有:$new")
(2)GPT 示例:
# 指定目录
$directory = "C:\file"
# 指定要查找的字符串
$searchString = "password"
# 查找目录下所有包含指定字符串的文件
ls $directory -Recurse | Select-String -Pattern $searchString
4、编写一个PowerShell脚本,用于将指定目录下的所有文件复制到另一个目录中。
(1)创建文件和目录:
mkdir c:\a
mkdir c:\b
echo a > c:\a\a.txt
echo aa > c:\a\aa.txt
echo aaa > c:\a\aaa.txt(2)编写脚本:
# $file = Read-Host("请输入被复制的目录:")
# $to = Read-Host("请输入你要将文件复制到的目录:")
$file = "c:\a"
$to = "c:\b"
cp $file\* $to
Read-Host("复制成功!输入回车确认,并查看 $to 目录中的内容...")
ls $to
5、编写一个PowerShell脚本,用于将指定目录下的所有文件压缩成一个zip文件。
# $file = Read-Host("请输入你要压缩的文件及路径")
# $to = Read-Host("请输入压缩后的名称及路径")
$file = "C:\b\a.txt"
$to = "C:\zip\a.zip"
rm C:\zip\*
Compress-Archive -Path $file -DestinationPath $to
Read-Host("压缩完成!点击回车查看压缩后的文件...")
ls $to
6、编写一个PowerShell脚本,用于将指定目录下的所有文件按照文件类型分类到不同的子目录中。
(1)编写脚本:
$file = "C:\all"
$doc = "C:\doc"
$txt = "C:\txt"
$zip = "C:\zip"
$bat = "C:\bat"
$det = "C:\all","C:\doc","C:\txt","C:\zip","C:\bat"
foreach ($a in $det) {
$check = Test-Path $a
if ($check -xor $false) {remove-item -path $a -Force -Recurse}
}
foreach ($a in $det) {
$check = Test-Path $a
if ($check -xor $true) {mkdir $a}
}
echo txt > c:\all\txt.txt
echo zip > c:\all\zip.zip
echo doc > c:\all\doc.doc
echo bat > c:\all\bat.bat
echo 111 > c:\all\1.1.1.1.1.bat
Get-ChildItem -Path $file -File | ForEach-Object {
$name = $_.Name
$sename = $name.Split(".")
$rename = $sename[-1]
if ($rename -eq "doc") {$des = $doc}
elseif ($rename -eq "txt") {$des = $txt}
elseif ($rename -eq "zip") {$des = $zip}
elseif ($rename -eq "bat") {$des = $bat}
$aaa = $des+ "\" + $name
$aaa
if (Test-Path $aaa) {rm $des\$name}
mv $file\$name $des
ls $file
Read-Host("
移动 $name 文件 成功!上面是 $file 目录,此时其内已经没有 $name 文件!输入回车继续....")
ls $des
Read-Host("
此时 $name 这个 $rename 格式文件 已经被移动到了 $des 目录中!输入回车继续....")
}7、编写一个PowerShell脚本,用于查找指定目录下的所有文件中最大的文件。
$file = Read-Host("请输入你要查看的目录:")
ls $file -Recurse | Sort-Object -Property Length -Descending | Select-Object -First 1
# 获取 指定目录 下的所有文件,并按文件大小降序排序,然后选择排序后的第一个文件。8、编写一个PowerShell脚本,用于查找指定目录下的所有文件中最新的文件。
(1)自己写的:
function num ($list) {
$str = $list.tostring()
$data = $str.Split("/") # 字符串截取,以“/” 进行分割
$year = [Int32]$data[0] # 使用下标索引,索引 $data 中下标为 0 的元素,并将其转化为 数字类型
$mon = [Int32]$data[1] # 使用下标索引,索引 $data 中下标为 1 的元素,并将其转化为 数字类型
$cont = $data[2].Split(" ") # 字符串截取,以“ ”(空格) 进行分割
$day = [Int32]$cont[0] # 使用下标索引,索引 $cont 中下标为 0 的元素,并将其转化为 数字类型
$ms = $cont[1].Split(":") # 字符串截取,以“:” 进行分割
$hour = [Int32]$ms[0]
$min = [Int32]$ms[1]
$sec = [Int32]$ms[2]
return($year,$mon,$day,$hour,$min,$sec)
}
$file = "C:\file"
$test = ls $file
$time = $test.LastWriteTime # 过滤出时间的字段
$name = $test.Name
$vpn = 1
$vpn1 = 0
foreach ($a in $time){
$nameb = "times" + $vpn
$seco = "names" + $vpn
if (Test-path variable:$nameb) {Remove-Variable $nameb}
New-Variable -Name $nameb -Value (num -list $time[$vpn1])
if (Test-path variable:$seco) {Remove-Variable $seco}
New-Variable -Name $seco -Value $name[$vpn1]
$vpn += 1
$vpn1 += 1
}
$num = 0
$a1 = 1
$a2 = 2
$a3 = 3
while ($true) {
$num1 = $times1[$num]
$num2 = $times2[$num]
$num3 = $times3[$num]
if ($a1 -eq 1) {
if ($num1 -gt $num2 -and $num1 -gt $num3) {
Read-Host("$names1 是 $file 目录下 最新的文件")
break
}
elseif ($num1 -lt $num2 -or $num1 -lt $num3 ) {Remove-Variable $a1}
}
elseif ($a2 -eq 2) {
if ($num2 -gt $num1 -and $num2 -gt $num3) {
Read-Host("$names2 是 $file 目录下 最新的文件")
break
}
elseif ($num2 -lt $num1 -or $num2 -lt $num3 ) {Remove-Variable $a2}
}
elseif ($a3 -eq 3) {
if ($num3 -gt $num1 -and $num3 -gt $num2) {
Read-Host("$names2 是 $file 目录下 最新的文件")
break
}
elseif ($num3 -lt $num1 -or $num3 -lt $num2 ) {Remove-Variable $a3}
}
$num += 1
}
(2)GPT 示例:
$file = "C:\file"
$files = Get-ChildItem $file | Sort-Object LastWriteTime -Descending | Select-Object -First 1
$year = $files.LastWriteTime.Year
$month = $files.LastWriteTime.Month
$day = $files.LastWriteTime.Day
$hour = $files.LastWriteTime.Hour
$minute = $files.LastWriteTime.Minute
$second = $files.LastWriteTime.Second
Write-Host "最新的文件: $($files.Name), Year: $year, Month: $month, Day: $day, Hour: $hour, Minute: $minute, Second: $second"
9、编写一个PowerShell脚本,用于查找指定目录下的所有文件中最旧的文件。
$dir = Read-Host("请输入你要查看的目录:")
$files = Get-ChildItem -Path $dir
$old = $files | Sort-Object LastWriteTime | Select-Object -First 1
Write-Host "最旧的文件是: $($old.FullName)"
10、编写一个PowerShell脚本,用于查找指定目录下的所有文件中最常见的文件类型。
$dir = Read-Host("请输入你要查看的目录:")
$files = ls -Path $dir
$fileTypes = $files | Group-Object Extension | Sort-Object Count -Descending
Write-Host "最常见的文件类型是: $($fileTypes[0].Name)"
11、编写一个PowerShell脚本,用于列出所有正在运行的进程,并显示它们的PID、名称和内存使用情况。
Get-Process | Select-Object Id, ProcessName, WorkingSet12、编写一个PowerShell脚本,用于列出所有已安装的软件,并显示它们的名称、版本和发布者。
wmic product get name,version,installlocation13、编写一个PowerShell脚本,用于列出所有已安装的Windows更新,并显示它们的名称、安装日期和状态。
wmic qfe list
14、编写一个PowerShell脚本,用于列出所有已安装的驱动程序,并显示它们的名称、版本和发布者。
driverquery15、编写一个PowerShell脚本,用于列出所有已安装的网络适配器,并显示它们的名称、IP地址和MAC地址。
ipconfig /all