【问题标题】:PS Script to get data from excel then remove permissions on shared folderPS脚本从excel中获取数据然后删除共享文件夹的权限
【发布时间】:2019-01-28 06:53:15
【问题描述】:

我正在创建一个简单的脚本来删除用户对共享驱动器文件夹的权限。我在 excel 文件中有用户名和共享驱动器文件夹。只有 2 列,1 列用于路径,另一列是用户名。

这是我对脚本所做的工作

$file = "C:\share\LanguagePack\testing.xlsx"
$SheetName = "Sheet1"
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $false
$WorkBook = $objExcel.Workbooks.Open($file)
$WorkSheet = $WorkBook.Sheets.Item($SheetName)
$WorkSheetRange = $WorkSheet.UsedRange
$RowCount = $WorkSheetRange.Rows.Count
$ColumnCount = $WorkSheetRange.Columns.Count


for ($num2=1, $num2 -lt $RowCount, $num2++) {

    $output = $WorkSheet.cells.Item($num2, 1).text
    $output1 = $WorkSheet.cells.Item($num2, 2).text

    icacls $output /remove:g $output1 /t

}

但我得到了

无法将“1”与“3 3”进行比较。错误:“无法转换“System.Object[]” “System.Object[]”类型的值以键入“System.Int32”。 在 C:\share\LanguagePack\Untitled1.ps1:26 char:6 + for ($num2=1, $num2 -lt $RowCount, $num2++) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : 比较失败

有什么想法或提示吗?谢谢

【问题讨论】:

  • 在for 循环中使用分号;,而不是逗号。
  • 是的,没有意识到这一点。谢谢

标签: excel powershell


【解决方案1】:

试试这个:

$file = "C:\share\LanguagePack\testing.xlsx"
$SheetName = "Sheet1"
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $false
$WorkBook = $objExcel.Workbooks.Open($file)
$WorkSheet = $WorkBook.Sheets.Item($SheetName)
$WorkSheetRange = $WorkSheet.UsedRange
$RowCount = $WorkSheetRange.Rows.Count
$ColumnCount = $WorkSheetRange.Columns.Count

for($row=1; $row -le $RowCount; $row++) {

    $output = $WorkSheet.cells.Item($row, 1).text
    $output1 = $WorkSheet.cells.Item($row, 2).text

    icacls $output /remove:g $output1 /t
}

【讨论】:

  • 它只处理了最后一行数据而不是excel中的所有数据:(
  • @Gang12:意识到我的错误......现在编辑代码。这应该有效。
【解决方案2】:

正如我已经评论过的,您所犯的错误是在foreach 循环中使用逗号, 而不是分号;

逗号使 Powershell 认为它是某种数组,因此出现错误

"Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Int32""

这应该可行:

for ($num2=1; $num2 -lt $RowCount; $num2++) {

    $output = $WorkSheet.cells.Item($num2, 1).text
    $output1 = $WorkSheet.cells.Item($num2, 2).text

    icacls $output /remove:g $output1 /t
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多