PS Сценарий для получения данных из Excel, а затем удалить разрешения на общую папку - PullRequest
0 голосов
/ 28 января 2019

Я создаю простой скрипт для удаления прав пользователя в папке на общем диске.У меня есть имена пользователей и общие папки на диске в файле 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 + для ($ num2 = 1, $ num2 -lt $ RowCount, $ num2 ++) {+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: ComparisonFailure

Есть идеи или советы?Спасибо

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Как я уже говорил, ошибка, которую вы допустили, заключается в использовании запятых , в цикле 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
}
0 голосов
/ 28 января 2019

Попробуйте это:

$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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...