我是全新的ps脚本和一些建议,请寻找。
我们每隔几年就更换一个数据共享服务器,手工创建完整的文件夹结构和权限是非常繁琐的,所以我尝试用powershell脚本来自动化它,因为我是新来的,我一直在谷歌上搜索一些例子和片段,并从中编译我需要的东西。
我的导出脚本读取文件夹结构并将其写入文本文件,而我的导入脚本在我将文件夹移动到新服务器后创建它,没有问题。问题在于访问权限。它读取权限并将其写入CSV,但一旦我尝试导入它,我就会得到一个错误:
新对象:无法将“FileSystemControlRule”的值为“TRUE”的参数“2”转换为类型“System.Security. SecurityControl. SecurityControlType”:“无法将值“TRUE”转换为类型“System.Security. SecurityControl. SecurityControlType”。错误:“无法将标识符名称TRUE与有效的枚举器名称匹配。请指定以下枚举器名称之一,然后重试:Allow,Deny””第1行,第23个字符
- . cnView Rule = new-object System.Security. CnView Control.FileSystemAccess.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
字符串
- CategoryInfo:InvalidOperation:(:)[New-Object],MethodException
- FullyExclusivedErrorId:ConstructorExclusivedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
据我所知,它正在寻找一个允许/拒绝,而不是一个真/假,但导出给出了一个真/假。所以我猜有什么问题与我的导出.
这是我的代码,如果有人能指出我在正确的方向,我会非常感激!!(让我知道,如果我应该张贴所有的代码,我只是不想杂乱任何比我已经做的:D)
导出:
$FolderPath = dir -Directory -Path $DriveLetter -Force
$Report = @()
Foreach ($Folder in $FolderPath)
{
if ($Folder.Name -notlike '*$RECYCLE.BIN*')
{
if ($Folder.Name -notlike '*System Volume Information*')
{
$Acl = Get-Acl -Path $Folder.FullName
foreach ($Access in $acl.Access)
{
$Properties = [ordered]@{'FolderName'=$Folder.Name;'IDRef'=$Access.IdentityReference;'FSRights'=$Access.FileSystemRights;'Inherited'=$Access.IsInherited}
$Report += New-Object -TypeName PSObject -Property $Properties
}
}
}
}
$Report | Export-Csv -path $ExportACL -NoTypeInformation
型
导入:
foreach ( $LItem in $ACL_Imp )
{
$path_full = $Drivepath.ToString() + $LItem.FolderName
$ACL_Set = Get-Acl $path_full
$permission = $LItem.IDRef, $LItem.FSRights, $LItem.Inherited
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $permission <<<--- Error occurs here
$ACL_Set.SetAccessRule($accessRule)
$ACL_Set | Set-Acl $path_full
}
型
导出csv中的一个用户的示例(我删除了驱动器号,因为它并不总是相同的驱动器号。)
TYPE System.Management.Automation.PSCustomObject; FolderName;IDRef;FSRights;Inherited Data\UserA;Domain\UserA;FullControl; TRUE Data\UserA;NT权限\SYSTEM;FullControl;TRUE Data\UserA;DOMAIN\UserB;FullControl;TRUE Data\UserA;BUILTIN\Administrators;FullControl;TRUE Data\UserA;DOMAIN\GRP_A; ReadAndExecute,TRUE;TRUE Data\UserA;Domain\GRP_A;ReadAndExecute,TRUE;TRUE
再次感谢您的帮助!如果您不能提供任何帮助,感谢您花时间查看!!:)
1条答案
按热度按时间lmvvr0a81#
我已经改变了我导出和导入的变量的数量,这似乎可以做到这一点。(导出所有变量,只使用5个)
我张贴我的完整代码的情况下,其他人也想使用这个,或想修改他们的需要:)
希望这将有助于在未来的人,我的评论是有意义的。
字符串
导出:
型
在导入之前,我在excel中打开csv文件并将其设置为不同的列,因此我使用“;”作为后缀,如果不编辑它,我会很挣扎。具有多个值的变量用“,”分割,这会搞乱导入。
此外,由于管理员权限需要应用ACL,脚本需要在提升的PS环境中运行,无法弄清楚如何在外部执行。可能可以运行批处理文件来执行RunAs,但我暂时有足够的脚本。:p
导入:
型