3

我有一台服务器自动生成报告。报告采用 CSV 格式。我需要能够直接加密文件,无需第三方压缩(没有 WinZIP 或 WinRAR)。

我认为最好的办法是将 CSV 转换为 XLS,然后通过 Powershell 对 XLS 文件进行密码保护。不幸的是,我没有在服务器上安装 Office,并且我找到的所有以这种方式转换文件的示例都需要安装 Excel。

有谁知道在不安装 Excel 的情况下在 Powershell 中将 CSV 转换为 XLS 的方法?或者,如果没有,您能想出一种更好的方法来密码保护 CSV 文件而不将其压缩为 ZIP 或 RAR?

4

3 回答 3

1

我已经提供了一个示例,用于加载 CSV 文件并将其导出到 Excel,而无需在此处安装 Excel 。由于这个问题专门要求保护 Excel 文件,我创建了一个使用EPPlus保护选项的示例。有关从 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") 
于 2014-12-29T16:43:16.293 回答
1

.net 4.5 现在包括带密码的完整 zip 压缩。因此,一旦您安装了 4.5,您应该能够从 powershell 访问这个库,而无需任何其他依赖项。

于 2013-10-28T15:23:58.807 回答
1

您可以尝试(如果您确实需要使用 PowerShell):

  1. 下载不需要安装 Excel 的外部 .NET 库,比如这个或者这个
  2. 将其加载到您的 PowerShell 会话中。
  3. 尝试在代码中使用该 dll 中定义的类型。

笔记!这种方法很难。根据您选择创建 excel 文件的程序集,您应该会遇到奇怪的行为和大量的安全问题。

至于我,对你来说最好的选择是在 c# 中创建一个简单的控制台应用程序,它将使用上面的程序集。然后每次需要时在目标机器上启动它。

PS 我尝试为您的问题创建 PowerShell 脚本,但没有成功。不幸的是,PowerShell 无法预测地与外部库一起工作。

于 2013-10-29T10:23:59.197 回答