我对Powershell相当新,我目前正在制作备份工具。
我遇到的问题是创建一个脚本来逐个复制文件,但保留任何文件夹结构(完全用户证明)。
我一个接一个地这样做的原因是,我可以检查它是否成功/失败,并将其输出到对象以从结果中创建HTML报告。
这个想法是这样的:
<html>
<style>
body {
background-color: linen;
}
h1 {
color: maroon;
margin-left: 40px;
}
</style>
<p>test text</p>
<html>
此外,我还想了解如何从输出对象中创建HTML表格的示例。虽然我有一个想法,但相当令人困惑。
function initCopy () {
$global:objects = @()
$contents = Get-ChildItem -recurse -path $f_from_path
foreach ($item in $contents) {
$str = "$item "
try {
Copy-Item -Path $item.FullName -Destination $f_to_path -Force -ErrorVariable err_Copy -ErrorAction Stop
$global:objects += New-Object -TypeName PSObject -Property @{
Name = $item.Name
OldPath = $item.FullName
Result = "Success"
}
$str += "Success"
}
catch {
$str += "Failure : $err_Copy"
$global:objects += New-Object -TypeName PSObject -Property @{
Name = $item.Name
OldPath = $item.FullName
Result = "Failure"
}
$str += "Failure"
}
echo $str >> $output_path
}
$global:object = New-Object -TypeName PSObject -Property $props
return $true
}
答案 0 :(得分:0)
要在PowerShell中一一复制文件和子文件夹,您需要更改每个文件副本的目标路径。而且您需要以不同于文件的方式处理子文件夹:
$f_from_path = "C:\Users\Michael\Documents"
$f_to_path = "C:\Users\Michael\Desktop\Test"
$contents = Get-ChildItem -Recurse -Path $f_from_path
foreach ($item in $contents) {
$newPath = $item.FullName
$newPath = $newPath.Replace($f_from_path, $f_to_path)
if ($item.PSIsContainer) {
#Write-Host ("Directory " + $item.FullName)
try {
New-Item -ItemType "directory" -Path $newPath -Force -ErrorVariable err_Copy -ErrorAction Stop | Out-Null
}
catch {}
}
else {
#Write-Host ("File " + $item.FullName)
try {
Copy-Item -Path $item.FullName -Destination $newPath -Force -ErrorVariable err_Copy -ErrorAction Stop
}
catch {}
}
}
未显示错误处理。
对于HTML输出,我还没有尝试过HTML的PowerShell cmdlet,但是您始终可以将HTML标记和值输出到纯文本输出文件,即使用Add-Content逐行编写HTML 。添加内容可能比使用.NET中的StreamWriter类要慢。