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

时间:2015-07-04 22:21:51

标签: windows batch-file net-use

我试图为一个非文化的朋友自动化一个简单但重复的任务。我是一名电视编辑,但我对此有一个简单的工作知识,所以我很欣赏你的技能和知识。

在Windows PC上,有PowerShell可用,我喜欢一个脚本(我真的很喜欢GUI,但那会是梦想),

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

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

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

  4. 注意:如上所述,网络共享必须在重启后保持不变。

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

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

    研究表明2: ?不知道从哪里开始

    研究表明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
    

2 个答案:

答案 0 :(得分:1)

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

    批量使用MD又名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
    
  4. 当然还有mkdir /?icacls /?net help sharenet help use

答案 1 :(得分:0)

所以我认为我已经解决了我自己的问题,语法/语法让新手传递变量感到困惑......

# 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