我有一台服务器自动生成报告。报告采用CSV格式。我需要能够直接加密文件,无需第三方压缩(没有WinZIP或WinRAR)。
我认为最好的办法是将CSV转换为XLS,然后通过Powershell密码保护XLS文件。不幸的是,我没有在服务器上安装Office,而且我找到的以这种方式转换文件的所有示例都需要安装Excel。
有没有人知道在没有安装Excel的情况下在Powershell中将CSV转换为XLS的方法?或者,如果没有,您能想到一种更好的方法来密码保护CSV文件而不将其压缩为ZIP或RAR吗?
答案 0 :(得分:1)
.net 4.5现在包含带密码的完整zip压缩。 因此,一旦安装了4.5,您就应该可以从powershell访问此库而不需要任何其他依赖项。
答案 1 :(得分:1)
您可以尝试(如果您确实需要使用PowerShell):
注意!这种做法很难。您应该期望奇怪的行为和充足的安全issues,具体取决于您选择创建Excel文件的程序集。
就我而言,最好的选择是在c#中创建一个简单的控制台应用程序,它将使用上面的程序集。然后在每次需要时在目标机器上启动它。
P.S。我试图为您的问题创建PowerShell脚本但没有成功。不幸的是,PowerShell与外部库无法预测。
答案 2 :(得分:1)
我已经提供了一个示例,用于加载CSV文件并将其导出到Excel而不安装Excel here。由于此问题专门要求保护Excel文件,因此我创建了一个使用EPPlus保护选项的示例。请参阅我的original answer以从CSV加载数据以及有关如何设置EPPlus的详细信息。
# Load EPPlus
$DLLPath = "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\EPPlus\EPPlus.dll"
[Reflection.Assembly]::LoadFile($DLLPath) | Out-Null
# Create Excel File
$ExcelPackage = New-Object OfficeOpenXml.ExcelPackage
$Worksheet = $ExcelPackage.Workbook.Worksheets.Add("Protected")
# Encryption
$ExcelPackage.Encryption.Algorithm = [OfficeOpenXml.EncryptionAlgorithm]::AES256
$ExcelPackage.Encryption.IsEncrypted = $true
$ExcelPackage.Encryption.Password = 'Excel'
# Protection of Workbook
$ExcelPackage.Workbook.Protection.LockRevision = $true
$ExcelPackage.Workbook.Protection.LockStructure = $true
$ExcelPackage.Workbook.Protection.LockWindows = $true
$ExcelPackage.Workbook.Protection.SetPassword("Workbook")
$ExcelPackage.Workbook.View.SetWindowSize(150, 525, 14500, 6000)
$ExcelPackage.Workbook.View.ShowHorizontalScrollBar = $false
$ExcelPackage.Workbook.View.ShowVerticalScrollBar = $false
$ExcelPackage.Workbook.View.ShowSheetTabs = $false
# Protection of Worksheet
$Worksheet.Protection.AllowAutoFilter = $false
$Worksheet.Protection.AllowDeleteColumns = $false
$Worksheet.Protection.AllowDeleteRows = $false
$Worksheet.Protection.AllowEditObject = $false
$Worksheet.Protection.AllowEditScenarios = $false
$Worksheet.Protection.AllowFormatCells = $false
$Worksheet.Protection.AllowFormatColumns = $false
$Worksheet.Protection.AllowFormatRows = $false
$Worksheet.Protection.AllowInsertColumns = $false
$Worksheet.Protection.AllowInsertHyperlinks = $false
$Worksheet.Protection.AllowInsertRows = $false
$Worksheet.Protection.AllowPivotTables = $false
$Worksheet.Protection.AllowSelectLockedCells = $false
$Worksheet.Protection.AllowSelectUnlockedCells = $false
$Worksheet.Protection.AllowSort = $false
$Worksheet.Protection.IsProtected = $true
$Worksheet.Protection.SetPassword("Worksheet")
# Save Excel File
$ExcelPackage.SaveAs("$HOME\Downloads\test.xlsx")