文件复制,Windows Event和Chkdsk的脚本

前段时间工作很忙,大家都焦头烂额的做测试,而我本身任务并不多。正好想学习PowerShell,于是便想写一些脚本,来完成一些比较机械的工作。 

第一个就是做了一个自动完成文件复制检查等等功能的脚本。并导出到logfile.txt

一共有3个函数

DataTransfer用来完成文件的复制,从Folder1->Folder2->...->Folder10,并检查每次复制以后文件大小是否一致。如果过程中出现问题,就会报错。

Function DataTransfer
{
    'Local Drives: '
    $in=get-psdrive -psprovider 'filesystem'
    $drive=read-host 'Please choose the drive that contains the test files(C/D/E/F/...)'
    $ind = $in | where-object{$_.Name -eq $drive}
    $dc=($ind|Measure-Object).count
    While($dc -eq 0)
    {
        Write-Warning 'The drive you selected is not available. Please choose another one.'
        $drive=read-host 'Please choose the drive that contains the test files(C/D/E/F/...)'
        $ind = $in | where-object{$_.Name -eq $drive}
        $dc=($ind|Measure-Object).count
    }
    $Source=$drive+':/AMD RAID Test/Data Transfer/'
    $t=Test-Path $source
    if($t -eq $false)
    {
        Write-Warning ('Can not find the folder: ' + $source)
        Write-Warning 'Please make sure that the folder exists.'
        Presskey
        exit
    }

    $DT='C:/Users/Richard/Desktop/Data Transfer'
    ("Create a new folder: " +$DT) |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log
    (new-item $DT -type directory -verbose)|tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log -append
    #Create folder1-folder11
    for ($i=1; $i -lt 12; $i++)
    {
        $Folders=$DT+'/Folder'+$i
        ("Create a new folder: " +$Folders) |tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
        (new-item $Folders -type directory -verbose) |tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
    }
    #Copy files
    for ($i=0; $i -lt 10; $i++)
    {
   
        if ($i -eq 0)
        {
            $Source=$drive+':/AMD RAID Test/Data Transfer/'
            $SourceFiles=$Source+'*.*'
            $Dest=$DT+'/Folder1'
        }
        else
        {
            $Source=$DT+'/Folder'+$i+'/'
            $SourceFiles=$Source+'*.*'
            $Dest=$DT+'/Folder'+($i+1)
        }
        'Files are transferring from '+$Source+' to '+$Dest |tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
        Try
        {
            (copy-item $SourceFiles $Dest -passthru) |tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
        }
        Catch
        {
            write-warning 'Fails to copy file from ' + $Source + ' to ' + $Dest '.'|tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            'Data Transfer Test Complete. Result: Fail'|tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            Presskey
            Return
        }
        $s=get-childitem -path $Source -recurse|measure-object -property length -sum
        $d=get-childitem -path $Dest -recurse|measure-object -property length -sum
        $s=$s.sum
        $d=$d.sum
        $Fail=0
        if ($d -eq $s)
        {
            'Copy Complete. Result: Pass'|tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            ' '|tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
        }
        else
        {
            write-warning 'Files in ' + $Source + ' and ' + $Dest ' are not of the same size.'|tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            'Data Transfer Test Complete. Result: Fail'|tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            Presskey
            Return
        }
    }
    (' ') |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    'Data Transfer Test Complete. Result: Pass' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
   
    #big data transfer
    $i=11
    $Dest=$DT+'/Folder'+$i
    $Source=$drive+':/AMD RAID Test/Big File Transfer/'
    $SourceFiles=$Source+'*.*'
    ' ' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    ('Files are transferring from '+$Source+' to '+$Dest) |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    Try
    {
        (copy-item $SourceFiles $Dest -passthru) |tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
    }
    Catch
    {
        write-warning 'Fails to copy file from ' + $Source + ' to ' + $Dest '.'|tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
        write-warning 'Big Data Transfer Result: Fail'|tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
        Presskey
        Return
    }
    $s=get-childitem -path $Source -recurse|measure-object -property length -sum
    $d=get-childitem -path $Dest -recurse|measure-object -property length -sum
    $s=$s.sum
    $d=$d.sum
    ' ' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    'Big File Transfer Test Complete' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    if ($d -eq $s)
    {
        'Big Data Transfer Result: Pass' |tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
    }
    else
    {
        write-warning 'Files in ' + $Source + ' and ' + $Dest ' are not of the same size.'|tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
        write-warning 'Big Data Transfer Result: Fail' |tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
        Presskey
    }
}

 

第二个函数EventTest,检查与Storage有关的Event,从Event View里面读取Error。

Function EventTest
{
    ' ' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    'Event Viewer Test:' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    $errtype='CD','DVD','Disk','ahcix64s.sys','ahcix86s.sys'
    $r=0
    for ($i=0; $i -lt 5; $i++)
    {
        $err=Get-EventLog System | where-object { $_.Source -eq $errtype[$i] }
        $errcount = $err.count
        if($errcount -gt 0)
        {
            Write-warning ($errtype[$i] + ' error(s) found: ' + $errcount) |tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            $err |tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            Write-warning ($errtype[$i] + ' Test Result: Fail') |tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            $r+=$errcount
        }
        else
        {
            ('No error about ' + $errtype[$i] + ' is found.') |tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
            ($errtype[$i] + ' Test Result: Pass') |tee-object -variable log
            out-file -filepath logfile.txt -inputobject $log  -append
        }
    }
    If($r-eq 0)
    {
        'Event Viewer Test Complete. Result: Pass'|tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
    }
    else
    {
        Write-warning 'Event Viewer Test Complete. Result: Fail'|tee-object -variable log
        out-file -filepath logfile.txt -inputobject $log  -append
        Presskey
    }
}

 

第三个比较简单,直接调用chkdsk就可以了。

Function CheckDisk
{
    ' ' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    'Check Disk Test' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    chkdsk 'c:' |tee-object -variable log
    out-file -filepath logfile.txt -inputobject $log  -append
    ' '
}

 

Function Presskey
{
    'Press any key to continue...'
    $x=$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}

 

最后调用3个函数。并在结束以后打开logfile.txt

"Storage Test Script"|tee-object -variable log
out-file -filepath logfile.txt -inputobject $log  -append
' ' |tee-object -variable log
out-file -filepath logfile.txt -inputobject $log  -append

DataTransfer

EventTest

CheckDisk

Presskey
invoke-item logfile.txt

 

刚开始学习,练练手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值