简单的PowerShell脚本,使一个目录与每个人的权限共享,并将其映射为共享networking驱动器

我试图自动化一个简单但重复的任务,一个非识字的朋友。 我是电视编辑,但是我有一个简单的工作知识,所以我感谢你的技能和知识。

在一台装有PowerShell的Windows PC上,我想要一个脚本(我真的很喜欢一个GUI,但那将是梦想),

  1. 在特定的硬编码位置创build一个新目录 – 检查是否存在同名的现有目录等

  2. 新的目录与所有人共享,完整的读/写权限

  3. 新目录被映射,与下一个可用的驱动器号一样持久,跳过光学介质/读卡器驱动器号。

注意:如上所述,networking共享必须在重新启动后保持不变。

研究build议1(但需要更多检查重复等):

# PowerShell creates a folder $Location = "X:\Clients\" New-Item -Path $Location -Name "My_New_Folder" -ItemType "directory" #Invoke-Item $Location 

研究build议2:? 不知道从哪里开始

研究build议3:

 @echo off setlocal call :freedrive mydriveletter && goto :cont echo ERROR: No free drive letter found. goto :exit :cont echo Found drive letter: %mydriveletter% goto :exit rem Finds a free drive letter. rem rem Parameters: rem %1 = Output variable name. rem rem Example: rem call :freedrive mydriveletter && goto :cont rem echo ERROR: No free drive letter found. rem goto :EOF rem :cont rem echo Found drive letter: %mydriveletter% :freedrive setlocal EnableDelayedExpansion set exitcode=0 set "output_var=%~1" for %%i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do ( set "drive=%%i:" rem If 'subst' fails, the drive letter is already in use. rem This way we can even detect optical drives that have a drive rem letter but no media in them, a case that goes undetected when rem using 'if exist'. subst !drive! %SystemDrive%\ >nul if !errorlevel! == 0 ( subst !drive! /d >nul goto :freedrive0 ) ) set exitcode=1 set drive= :freedrive0 endlocal & set "%output_var%=%drive%" & exit /b %exitcode% :exit pause 

  1. 这是没有必要的 只要创建文件夹,如果它已经存在,它将失败。

    批量使用MD aka mkdir命令。

     md c:\somepath\somefolder 

    由于只有一个磁盘访问并使用较少的系统资源,因此速度更快。

  2. 您有文件/文件夹权限和共享权限。

     icacls c:\somepath\somefolder /grant everyone:F net share sharename=c:\somefolder /grant:everyone,FULL 
  3. 映射驱动器

    但是我感到困惑 – 映射驱动器对用户有什么好处?

     net use * \\server\share\folder /persistant:yes 

当然mkdir /?icacls /?net help sharenet help use

所以我认为我已经解决了我自己的问题,语法/语法混淆了新手通过变量沿…

 # create a folder with user input $folder = Read-Host 'Name a new directory to be created in the Clients folder' $Location = "C:\Clients\" New-Item -Path $Location -Name "$folder" -ItemType "directory" # set permission icacls "$Location$folder" /grant everyone:F # share folder net share $folder="$Location$folder" /GRANT:EVERYONE`,FULL # map folder as drive net use * /persistent:yes \\localhost\$folder