powershell 练习 -12.28.note

noteId: 977E699A7FC64619A5788573FB2BB56A · 原始路径:/ALL/Windows - B模块/服务配置/Windows Powershell/powershell 练习 -12.28.note · 图片:2 · 附件待处理:1

 
·题目:
 
 
 
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, WorkingSet
 
 
 
12、编写一个PowerShell脚本,用于列出所有已安装的软件,并显示它们的名称、版本和发布者。
wmic product get name,version,installlocation
 
 
13、编写一个PowerShell脚本,用于列出所有已安装的Windows更新,并显示它们的名称、安装日期和状态。
wmic qfe list
 
 
14、编写一个PowerShell脚本,用于列出所有已安装的驱动程序,并显示它们的名称、版本和发布者。
driverquery
 
 
15、编写一个PowerShell脚本,用于列出所有已安装的网络适配器,并显示它们的名称、IP地址和MAC地址。
ipconfig /all