Скрипт Powershell для поиска файлов в папках с ограниченным доступом (другие пользовательские папки)

Я делаю скрипт, который будет искать файл. Если файл найден, он запишет текстовый файл на сервер с именем компьютера и путем, где находится файл.

$filePath = "c:"
$fileName = "somefile"
$computerName = Get-Content env:computername
$srvPath = "\\server\share$\FindFileScript\$computerName.txt"

#SEARCH FOR FILE ON C DISK
$fileResult = (Get-ChildItem -Recurse -Force $filePath -ErrorAction SilentlyContinue
| Where-Object { $_.Name -like "*$fileName*" } | Select-Object FullName | format-Table * -AutoSize)
if ($fileResult -eq $Null)
{
Write-Host "File named $fileName on disk C was not found."
}
Else
{
Write-Host "File named $fileName on disk C was found."
Out-File -FilePath $srvPath -InputObject $fileResult
}

1) Мы используем стороннюю программу, которая также может развертывать программы и запускать скрипт powershell.

Проблема в том, что скрипт запуска программы от имени администратора, поэтому скрипт powershell не может искать файлы в папке C:\Users[some_other_user].

Есть ли способ принудительно выполнить поиск в папках с ограниченным доступом?

2) Второй вопрос не столь важен, а можно ли как-то включить в $filePath не только C:, но и D:?

====================================== РЕДАКТИРОВАТЬ: Хорошо, я думаю, что проблема теперь еще хуже . Он вообще не ищет не только в пользовательской папке, но и на диске С... почему-то я этого не заметил.

Так что проблема не в скрипте powershell, а в стороннем инструменте развертывания. При запуске скрипта вручную на физическом компьютере он работает.

Поэтому мне лучше найти способ запустить этот скрипт другим способом, есть ли другой способ запустить этот скрипт для пользователей?

Я попробовал на локальной машине из cmd.exe:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1

Он возвращал результаты поиска только на D: и I:, но игнорировал C:

======================================EDIT2: я запускаю Powershell как обычный пользователь, копирую и вставляю script и он работает, он находит файл на диске C!

Если я запускаю Powershell как сценарий копирования-вставки администратора, он не работает, он не находит файл на диске C.


person Phoneutria    schedule 18.09.2013    source источник
comment
Конечно, чтобы сделать скрипт короче, я удалю Write-Host и позже поставлю -ne $Null.   -  person Phoneutria    schedule 18.09.2013


Ответы (1)


1) Мы используем стороннюю программу, которая может развертывать программы и запускать сценарии PowerShell.

Проблема в том, что скрипт запуска программы от имени администратора, поэтому скрипт powershell не может искать файлы в папке C:\Users[some_other_user].

Есть ли способ принудительно выполнить поиск в папках с ограниченным доступом?

По умолчанию только владелец папки профиля (обычно соответствующий пользователь) имеет доступ к папке. Чтобы разрешить доступ другим пользователям, вам необходимо стать владельцем папки в качестве администратора, а затем переназначить разрешения. Общепринятой практикой является предоставление полного доступа СИСТЕМЕ, администраторам и пользователю, которому принадлежит профиль.

Вы можете определить политику, которая изменяет поведение по умолчанию, чтобы СИСТЕМА и администраторы автоматически получали доступ к вновь созданным профилям.

Обратите внимание, что поиск профилей других пользователей может иметь последствия для конфиденциальности, поэтому убедитесь, что это действительно законно для вас.

2) Второй вопрос не столь важен, а можно ли как-то включить в $filePath не только C:, но и D:?

Get-ChildItem принимает массив строк, поэтому вам просто нужно изменить

$filePath = "c:"

в

$filePath = "c:", "d:"
person Ansgar Wiechers    schedule 18.09.2013