Perl在Windows上运行时获取父文件夹权限的最佳做法是什么?

我不是一个Perl开发人员,但我需要它为perforce做触发器。

所以这是背景:
我有一个Windows服务作为pipe理员运行,在Windows上调用Perl脚本。

该脚本需要在networking存储器上创build一个文件,该文件都configuration为使用Windows和UNIX权限\安全types。

由于运行脚本的用户是pipe理员用户,所有目录下创build的所有文件夹和文件都不会inheritance目录权限,而只能对根目录进行编辑。

我试图做的是创build文件,而不是chmod到父文件夹的“统计”结果。

my ($perms, $uid, $gid) = (stat $ParentDirFullPath)[2, 4, 5]; $perms = sprintf("%04o", $perms & 0777); chmod($perms, $NewFileFullPath); 

问题是windows上的stat命令没有得到unix \ gid和unix \ uid + chmod命令不是真的被支持。

我查看了file::stat模块,find了显示windows权限的方法(因为它们也存在),并将它们应用到我未testing的应用程序中,该应用程序可能位于模块Win32::FileSecurity 。 我没有find一种方法从那里获得权限(我得到stat=ARRAY(0x46d0f8) )。

任何想法或build议?

TL; DR :(“如何?”问题)在带有父文件夹权限的Windows上运行Perl脚本,并将其应用于脚本在支持Windows和Unix安全性/权限types的networking存储中创build的文件我想申请窗口像组和用户的权限)。

编辑:
我试了下一个代码:

 use Win32::FileSecurity qw(Get EnumerateRights); use Win32; my $dir1 = "\\\\NetworkStorage\\home\\user1"; my $dir2 = "\\\\NetworkStorage\\home\\user1\\PerlFileSecTest"; my %permissions; Win32::FileSecurity::Get($dir1, \%permissions); Win32::FileSecurity::Set($dir2, \%permissions); 

我得到下一个错误:

 S-1-5-11-2038111172-1292333386-11111-20315(this is not an original number and it changes this is unix FS user identifier that the AD knows how to parse) Error handling error: 1332, LookupAccountName. 

所以看起来FileSecurity无法处理来自支持unixfs和NTFS的基于unix的存储的用户标识符。

这很奇怪,因为当我select一个文件夹为例,并做“右键单击 – >属性 – >安全选项卡”我看到的数字,然后他们被parsingunixUid \ user1等…

任何想法如何解决它?

特别是对于我的情况,问题是网络驱动器上的混合模式,我发现下一个解决方案对我来说足够好。

我调用了“icacls”系统命令,并为上述文件夹中的域用户手动设置权限。

 my $error = system("icacls $CreatedDir /grant domain\\user:(OI)(CI)F /T"); 

上面的代码为用户提供了完整的递归权限,该权限是由服务使用admin用户创建的文件夹(导致该文件夹仅在我们的配置中为rood或admin用户锁定)。

请注意,上面的命令不会覆盖现有的权限,但对我来说已经足够了。

所以最终我会得到一个文件夹和文件,用户可以访问这个文件,这个文件叫做与admin用户一起运行的特定服务。