没有访问权限的文件夹的Powershell Get-Acl
Powershell Get-Acl for folders without access permissions
我写了一个脚本,它给了我 user/group 的文件夹 + 子文件夹的所有权限。但是,如果我的用户至少对所有这些文件夹具有读取权限,则该脚本才有效。如果他没有权限,get-acl 将被拒绝。
有什么办法可以解决这个问题,因为我不想每次执行此脚本时都手动切换我的用户。
我可以用不同的用户执行 powershell 脚本吗?如果是,怎么做?
提前谢谢你,科林
你有几个我能想到的选项:
选项 1:
使用您想要 运行 的实际代码创建一个帮助程序文件并将其命名为脚本。ps1 例如:
[array]$users = "user1","user2","user3"
foreach($user in $users){
$creds = Get-Credential -UserName $user -Message "Enter the Users Password"
$Session = New-PSSession -Credential $creds
Invoke-Command -Session $Session -FilePath C:\Path\to\some\script.ps1
}
选项 2:运行 每个用户一个作业。每项任务完成后,将询问新的用户凭据。只需将代码添加到脚本块
[array]$users = "user1","user2","user3"
foreach($user in $users){
$creds = Get-Credential -UserName $user -Message "Enter the Users Password"
$target = $user
$job = Start-Job -scriptblock {
param ($username)
Get-Acl C:\Users$user #Bla bla the rest of your script
} -Args $user -credential $creds
do{
#Wait for the job to finish
}until($job.State -ne "Running")
Write-Host "Job finished with state $($job.State)"
}
希望对您有所帮助!
请注意,如果您不想一直输入,也可以自动创建 creds 对象。 (未考虑安全原则;))
$users = @()
$users += @{
username = "User1"
password = "Pass123!"
}
$users += @{
username = "User2"
password = "Pass123!"
}
foreach($user in $users){
$creds = New-Object System.Management.Automation.PSCredential($user.username,($user.password | ConvertTo-SecureString -AsPlainText -Force))
#Add the rest of the script from the chosen option
}
我写了一个脚本,它给了我 user/group 的文件夹 + 子文件夹的所有权限。但是,如果我的用户至少对所有这些文件夹具有读取权限,则该脚本才有效。如果他没有权限,get-acl 将被拒绝。 有什么办法可以解决这个问题,因为我不想每次执行此脚本时都手动切换我的用户。
我可以用不同的用户执行 powershell 脚本吗?如果是,怎么做?
提前谢谢你,科林
你有几个我能想到的选项:
选项 1: 使用您想要 运行 的实际代码创建一个帮助程序文件并将其命名为脚本。ps1 例如:
[array]$users = "user1","user2","user3"
foreach($user in $users){
$creds = Get-Credential -UserName $user -Message "Enter the Users Password"
$Session = New-PSSession -Credential $creds
Invoke-Command -Session $Session -FilePath C:\Path\to\some\script.ps1
}
选项 2:运行 每个用户一个作业。每项任务完成后,将询问新的用户凭据。只需将代码添加到脚本块
[array]$users = "user1","user2","user3"
foreach($user in $users){
$creds = Get-Credential -UserName $user -Message "Enter the Users Password"
$target = $user
$job = Start-Job -scriptblock {
param ($username)
Get-Acl C:\Users$user #Bla bla the rest of your script
} -Args $user -credential $creds
do{
#Wait for the job to finish
}until($job.State -ne "Running")
Write-Host "Job finished with state $($job.State)"
}
希望对您有所帮助!
请注意,如果您不想一直输入,也可以自动创建 creds 对象。 (未考虑安全原则;))
$users = @()
$users += @{
username = "User1"
password = "Pass123!"
}
$users += @{
username = "User2"
password = "Pass123!"
}
foreach($user in $users){
$creds = New-Object System.Management.Automation.PSCredential($user.username,($user.password | ConvertTo-SecureString -AsPlainText -Force))
#Add the rest of the script from the chosen option
}