用于在受限文件夹(其他用户文件夹)中查找文件的Powershell脚本

时间:2013-09-18 07:09:52

标签: powershell get-childitem

我正在编写一个搜索文件的脚本。如果找到文件,它将在服务器上写入txt文件,其中包含计算机的名称和文件所在的路径。

$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:还有吗?

====================================== 编辑: 好吧,我认为现在问题更严重了。它不仅搜索用户文件夹而且搜索C盘...由于某种原因我没有注意到这一点。

所以问题不在于PowerShell脚本,而在于第三方部署工具。在物理计算机上手动启动脚本时,它可以正常工作。

所以我最好找到一种方法,以其他方式启动此脚本,还有其他方法可以为用户启动此脚本吗?

我尝试使用cmd.exe中的本地计算机:

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

它在D:和I:上返回了搜索结果,但忽略了C:

====================================== EDIT2: 我启动Powershell作为普通用户复制粘贴脚本并且它可以工作,它在C盘上找到一个文件!

如果我以管理员复制粘贴脚本启动Powershell,那么它不起作用,它在C盘上找不到文件。

1 个答案:

答案 0 :(得分:0)

  

1)我们正在使用可以部署程序并启动powershell脚本的第三方程序。

     

问题是虽然程序启动脚本是管理员用户,因此不允许powershell脚本在C:\ Users [some_other_user]文件夹中搜索文件。

     

有没有办法强制搜索限制文件夹?

默认情况下,只有配置文件夹(通常是相应用户)的所有者才能访问该文件夹。要允许其他用户访问,您需要以管理员身份获取该文件夹的所有权,然后重新分配权限。通常的做法是向SYSTEM,管理员和配置文件所属的用户授予完全控制权。

您可以定义更改默认行为的策略,以便系统和管理员自动被授予对新创建的配置文件的访问权限。

请注意,搜索其他用户的个人资料可能会对隐私产生影响,因此请确保执行此操作确实合法。

  

2)第二个问题不是那么重要但是有可能以某种方式在$ filePath中包含C:但D:还是吗?

Get-ChildItem采用字符串数组,因此您只需要更改

$filePath = "c:"

$filePath = "c:", "d:"