前段时间工作很忙,大家都焦头烂额的做测试,而我本身任务并不多。正好想学习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
刚开始学习,练练手。