Powershell Создать/проверить папку скопировать данные с протоколированием. Powershell создать папку
[powershell-ise] Создать каталог, если он не существует [windows-server-2008]
Вы пробовали параметр -Force ?
New-Item -ItemType Directory -Force -Path C:\Path\That\May\Or\May\Not\ExistВы можете сначала проверить Test-Path -PathType Container .
Дополнительную информацию см. В статье справки по статье MSDN.
У меня была точно такая же проблема. Вы можете использовать что-то вроде этого:
$local = Get-Location; $final_local = "C:\Processing"; if(!$local.Equals("C:\")) { cd "C:\"; if((Test-Path $final_local) -eq 0) { mkdir $final_local; cd $final_local; liga; } ## If path already exists ## DB Connect elseif ((Test-Path $final_local) -eq 1) { cd $final_local; echo $final_local; liga; (function created by you TODO something) } }Существует 3 способа создания каталога с помощью PowerShell
Method 1: PS C:\> New-Item -ItemType Directory -path "c:\livingston" Method 2: PS C:\> [system.io.directory]::CreateDirectory("c:\livingston") Method 3: PS C:\> md "c:\livingston"Вот простой, который работал на меня. Он проверяет, существует ли путь, а если нет, он создаст не только корневой путь, но и все подкаталоги:
$rptpath = "C:\temp\reports\exchange" if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}code-examples.net
Пакетное создание папок в PowerShell и Bash Windows 10
Если вам нужно создать группу папок в Windows, вместо того чтобы нажимать на ленте Проводника «Создать папку», можете воспользоваться встроенной консолью PowerShell. Этот способ позволит вам сэкономить время. Откройте любым удобным для вас способом PowerShell, а сделать это можно через меню Пуск, через поиск, через диалоговое окошко «Выполнить» и через меню Win + X, предварительно заменив консолью стандартную командную строку.
А еще ее можно запустить из адресной строки Проводника, находясь в директории, в которой вы собираетесь создавать группу папок. В данном случае этот способ имеет преимущества, так как избавляет пользователя от необходимости переходить в нужный каталог в PowerShell.
Сама же команда создания папок выглядит следующим образом:
mkdir $(1..30 | %{"Папка$_"})
«Расшифруем» значения в круглых скобках. Выражение 1..30 означает, что будет создано 30 папок, %{"Папка$_"}) – это имя папки с переменной $_, на место которой будет подставляться порядковый номер очередного создаваемого каталога.
Для группового создания папок в Windows 10 можно также использовать новый инструмент – консоль Ubuntu Bash. Переход в нужное расположение в Bash выполняется с помощью команды cd, например, cd /mnt/d/Public, где d – буква диска, а создание группы папок командой mkdir dir{1..30}.
Кстати, есть твик реестра, с помощью которого Ubuntu Bash можно добавить непосредственно в меню Проводника, что позволит вам открывать консоль сразу в нужном расположении. Скачать его можно по ссылке https://yadi.sk/d/jpFjGpRHvzLg9.
windowstips.ru
powershell - получить последнюю созданную папку из пути с помощью powershell
PowerShell работает в основном с конвейером, поэтому большая часть того, что вы будете писать, будет состоять из создания объектов, представляющих некоторую информацию, а также их фильтрации и манипулирования ими. В этом случае объекты представляют собой набор папок.
-
Получить все элементы в папке. Это получит файлы и папки, поэтому шаг 2 необходим. | в конце строки сигнализирует о продолжении конвейера в следующей строке - объекты, созданные Get-ChildItem, будут передаваться по очереди одной команде.
Get-ChildItem c:\temp | -
Фильтр для папок. К сожалению, нет действительно элегантного способа. Не беспокойтесь о том, что в нем говорится "контейнер", а не "папка". Эти команды работают со многими разными вещами, а не только с файлами и папками, поэтому для именования была использована более общая концепция.
Where { $_.PSIsContainer } | -
Сортировать по дате, по убыванию, поэтому самая новая папка - первая.
-
Выберите первую (самую новую) папку.
Select -First 1
Короче говоря:
gci c:\temp | ? { $_.PSIsContainer } | sort CreationTime -desc | select -f 1или
(gci c:\temp | ? { $_.PSIsContainer } | sort CreationTime)[-1]Обе эти строки сильно используют псевдонимы по умолчанию для команд в PowerShell, например ? для Where-Object. Однако вы должны использовать полные имена в сценариях, так как вы никогда не узнаете, как будут выглядеть псевдонимы на других машинах, на которых может работать код.
EDIT: У PowerShell 3 есть дополнительные параметры для Get-ChildItem, которые позволяют вам напрямую фильтровать файлы или папки, поэтому вам не нужен Where:
Get-ChildItem -Directory C:\temp | ...Как правило, вы будете работать с объектами и их свойствами в PowerShell. Две очень полезные команды: Get-Member и ее псевдоним gm и Get-Command или просто gcm. Get-Member расскажет вам, какие свойства и методы имеет объект; вы просто подключите к нему что-то еще:
Get-ChildItem | gmсообщит вам, какие файлы свойств и каталоги имеют.
Get-Command отобразит все команды или те, которые соответствуют определенному шаблону. Команды PowerShell стараются быть очень последовательными в использовании глаголов и существительных. Чтобы найти все команды, которые заканчиваются на Object, вы можете попробовать gcm *-Object - это общие команды, работающие с почти всем. Get-Help ForEach-Object затем расскажет вам о конкретной команде ForEach-Object в этом случае.
qaru.site
Powershell Создать/проверить папку скопировать данные с протоколированием
Так что, я не есть хороший способ, чтобы захватить ошибки в этом сценарии, но вы могли бы, вероятно, использовать Try {}/{} Поймать вещь, чтобы получить ошибки. То, что это делает, это копировать файлы и отображать индикатор выполнения с количеством файлов. Он также проверяет исходную папку и папку назначения друг на друга. Если последняя папка в исходной и последней папке в dest одинакова, она проверяет, существует ли dest, если она не создается. Если они отличаются друг от друга, он проверяет, существует ли в папке последняя папка источника, а если нет, она создает ее и устанавливает для нее пункт назначения. Он также включает в себя переключатель -Exact, если вы хотите, чтобы он скопировал в папку назначения именно так, как он был указан, и имеет параметр «-Force», который заставляет его перезаписывать файлы, если они уже существуют.
Редактировать: Хорошо, проблема с дубликатом подпапки исправлена. Это копирование элементов, но поскольку свойство FullName объекта FileInfo на самом деле содержит имя самой папки, когда копия была скопирована, она вызвала
stackoverrun.com
powershell - Powershell script создание домашней папки для пользователя и установка разрешений
Моя проблема: я не могу получить установленные разрешения.
В приведенном ниже коде my_fileServer является именем файлового сервера; sso означает идентификатор однократного входа, который в тестовом коде ниже установлен на "user9999".
Любая помощь очень ценится!
Set-Variable homeDir -option Constant -value "\\my_fileServer\Users" Set-Variable sso -option Constant -value "user9999" # If the folder for the user does not exist, make a new one and set the correct permissions. if ( (Test-Path "$homeDir\$sso") -eq $false) { try { $NewFolder = New-Item -Path $homeDir -Name $sso -ItemType "Directory" $Rights = [System.Security.AccessControl.FileSystemRights]"FullControl,Modify,ReadAndExecute,ListDirectory,Read,Write" $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None $objType =[System.Security.AccessControl.AccessControlType]::Allow $objUser = New-Object System.Security.Principal.NTAccount "my_full_domain_name\$sso" $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ` ($objUser, $Rights, $InheritanceFlag, $PropagationFlag, $objType) $ACL = get-acl -Path $NewFolder $ACL.AddAccessRule($objACE) $objReturn = Set-ACL -Path "$homeDir\$sso" -AclObject $ACL $objReturn } catch { $msg = $_ $msg } }qaru.site
Powershell для тупых -2 Создание множества пользвателей и папок с правами для них
Больше для себя. Но вдруг кому поможет.Создаем кучу пользвателей с кучей параметров, содаем для них группу безопасности, создаем папку для группы, а внутри этой папки - личные папки пользователей и нужными нам правами.
Условия:
ADWIndows 2008 R2Powershell_iseмодуль NTFSSecurity для powershellфайловая шара для создания папок \\studsrv\students
1. Создаем CSV файл в кодировке Unicode, где описываем в столбцах нужные параметры. Например создадим 4 студентов:
#имена столбцовName,Password,Surname,GivenName,DisplayName,Description,Department,profilePath,homeDirectory,Title,Division,City,ScriptPath,SamAccountName #содержимое столбцовstudents14st30,dofbwut,Ivanova,Alena,Иванова Алёна Юрьевна,Студент_с_2014_года,students-14,\\dc1\profiles\student.man,\\studsrv\students\students14\students14st30,Студент,students-14,Perm,start_st.bat,students14st30students14st31,jghwpty,Petrov,Nikolai,Петров Николай Сергеевич,Студент_с_2014_года,students-14,\\dc1\profiles\student.man,\\studsrv\students\students14\students14st31,Студент,students-14,Perm,start_st.bat,students14st31students14st32,nkfroqw,Sidorov,Bogadn,Сидоров Богдан Станиславович,Студент_с_2014_года,students-14,\\dc1\profiles\student.man,\\studsrv\students\students14\students14st32,Студент,students-14,Perm,start_st.bat,students14st32students14st33,lkdtwqe,reserv,reserv,reserv,Студент_с_2014_года,students-14,\\dc1\profiles\student.man,\\studsrv\students\students14\students14st33,Студент,students-14,Perm,start_st.bat,students14st33
более подробно см. http://parafoxer.livejournal.com/106150.html или по тегу powershell
2. Называем и размещаем этот файл C:\scripts\students\students-14.csv3. Открываем Powershell ISE и копируем туда код:
#Разрешаем скрипты, импортируем модульSet-ExecutionPolicy Unrestricted -forceimport-module activedirectory#создаем кучу пользователейImport-CSV -Path "C:\scripts\students\students-14.csv" | ForEach-Object -process {New-ADuser -Name $_.Name -Surname $_.Surname -City $_.City -Department $_.Department -profilePath $_.profilePath -homeDirectory $_.homedirectory -GivenName $_.GivenName -Title $_.Title -Description $_.Description -DisplayName $_.DisplayName -Division $_.Division -ScriptPath $_.ScriptPath -SamAccountName $_.SamAccountName -Path "OU=Student,OU=Students_OU,DC=domain,DC=gorod,DC=ru" -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) -Company domain_gorod_students}Start-Sleep -s 5#создаем группу безопасности для этих пользователейNew-AdGroup -Name students-14 -SamAccountName students-14 -Description "Группа студентов students-14" -GroupCategory Security -GroupScope Global -Path "OU=Student,OU=Students_OU,DC=domain,DC=gorod,DC=ru"Start-Sleep -s 5#добавляем туда всех этих пользователейGet-ADUser -filter {(Department -eq "students-14")} | ForEach-Object -process {Add-ADGroupMember -identity "students-14" -Members $_.SamAccountName}Start-Sleep -s 5#добавлем группу пользователей в общую группу ВСЕХ пользователей - в группу StudentsAdd-ADGroupMember Students students-14Start-Sleep -s 5#создаем для группы папку, в которой будут храниться личные папки пользователейGet-ADgroup students-14 | Sort-Object -Property Name | Select-Object -Property sAMAccountName | foreach {$folderName = $_.SamAccountName$Dir = "\\studsrv\students\"New-Item -ItemType directory -Path $Dir -Name $folderName}Start-Sleep -s 5#импортируем модуль ntfssecurity (подробнее см. http://parafoxer.livejournal.com/188293.html) и создаем для каждого пользователя личную папку, именую ее именем пользователя (samAccountName) и даем на них полные права администраторам (user1, user2, user3)import-module ntfssecurityGet-Item \\STUDSRV\students\students-14| Add-Ace -Account domain\user1 -AccessRights FullControlGet-Item \\STUDSRV\students\students-14| Add-Ace -Account domain\user2 -AccessRights FullControlGet-Item \\STUDSRV\students\students-14| Add-Ace -Account domain\user3 -AccessRights FullControlStart-Sleep -s 5$rootDir = "\\studsrv\students\students-14\"Get-ADUser -filter {(Department -eq "students-14")} | foreach {$folderName = "$($rootDir)$($_.Department)\$($_.SamAccountName)"New-Item -ItemType directory -Path $folderName}Start-Sleep -s 5
4. Назначаем каждому пользователю нужные права с использованием функционала ntfssecurity. Обратите внимание - для каждого пользователя выпоняется своя команда. Назначение прав просто через powershell без модуля ntfssecurity гораздо сложнее - там всего 2 команды get-acl \ set-acl а все остальное - куча методов, осваивать которые желания нет. Шаблон такой команды в экселе создать несложно, заменять и продлять требуется только номера пользователей.
Get-Item \\STUDSRV\students\students-14\students14st30 | Add-Ace -Account hse\students14st28 -AccessRights Modify, SynchronizeGet-Item \\STUDSRV\students\students-14\students14st31 | Add-Ace -Account hse\students14st29 -AccessRights Modify, SynchronizeGet-Item \\STUDSRV\students\students-14\students14st32 | Add-Ace -Account hse\students14st30 -AccessRights Modify, SynchronizeGet-Item \\STUDSRV\students\students-14\students14st33 | Add-Ace -Account hse\students14st30 -AccessRights Modify, Synchronize
т.к. модуль ntfssecurity уже импортиорван (п.3) выполняем команды сразу
5. Итог - куча октлюченных (!не забыть включить) пользователей, в группе, с папками, с правами
parafoxer.livejournal.com
Управляем сетевыми папками с помощью PowerShell / Блог компании Netwrix / Хабр
Публикуем вторую часть перевода статьи File Server Management with Windows PowerShell. В первой части мы рассматривали как с помощью PowerShell строить отчеты о сетевых папках. На этот раз в зоне нашего внимания находятся такие вопросы как создание сетевой папки, делегирование прав доступа к ней и прекращение совместного доступа.Создаем новые папки
Теперь давайте взглянем на то, как можно использовать PowerShell для создания файлов и папок и управления ими. Все, что я продемонстрирую, Вы можете использовать в PS 2.0 и 3.0 (хотя в PS 3.0 приводимые мною примеры можно упростить). Управление файловым сервером в PowerShell 2.0 требует обращения к WMI и написанию сложных скриптов. В PowerShell 3.0, особенно если у вас Windows Server 2012, этот тип управления значительно упрощен. Именно его я и собираюсь рассмотреть. Все, что нам необходимо, уже имеется в модуле SMBShare, который по умолчанию установлен на моей машине Windows 8. Команды в этом модуле позволят нам локально и удаленно управлять папками. Я не собираюсь останавливаться на каждой команде подробно – они довольно однотипны; рекомендую прочитать справку и примеры. Мы же начнем с использования команды New-SMBShare, чтобы создать новую папку. Сделать это нужно за пару шагов. Так как папка должна быть на удаленном сервере, я установлю удаленную сессию PowerShell:$session=New-PSSession -ComputerName SRV2K12RC Я, конечно, могу использовать интерактивную сессию, однако передо нами стоит задача автоматизации, так что использую команду Invoke-Command. Для начала я создам новую папку:invoke-command -ScriptBlock {mkdir c:\shares\companyfiles}-Session $sessionА сейчас сложная часть. Я хочу установить такие NTFS разрешения, чтобы JDHLAB\Domain Users имела разрешения на изменения (Change). Для этого необходимо создать новое правило доступа, изменяющего список правил доступа и заново применяющих их к папке. В примере 6 приведен пример скрипта:Пример 6: Создание, изменение и применение правила доступа
$sb={ Param($path) $du=new-object System.Security.AccessControl.FileSystem AccessRule "jdhlab\domain users","Modify","allow" $acl = Get-ACL $path $acl.AddAccessRule($du) Set-Acl -Path $path -AclObject $acl }В примере 6 я сделал так, чтобы параметр пути можно было заново использовать.
Invoke-Command -ScriptBlock $sb -Session $session -ArgumentList c:\shares\companyfilesСуществует способы упростить этот процесс, но для целей ясности мы сохраним все так как есть. Сейчас мы готовы создать новую папку. Я могу использовать эту сессию, но я хочу продемонстрировать, как можно использовать команду New-SmbShare, чтобы удаленно подключиться к файловому серверу:
New-SmbShare -Name Files -Path c:\shares\companyfiles -CimSession SRV2K12RC -FullAccess "jdhlab\domain admins" -ChangeAccess Everyone -Description "Company files"Право доступа к папке по умолчанию стоит “Только чтение” (ReadOnly). Я выдал доменным админам Полный контроль (Full Control) на папку, и всем остальным выдал права на изменение (Change). Этот путь относителен к удаленному компьютеру, который должен работать под PS 3.0.
Расширенные настройки папки
Получить информацию о папке можно в любое время, использовав команду Get-SMBShare, как вы можете видеть на рисунке 9. Можно сделать еще парочку вещей с нашими папками, например, зашифровать SMB соединение, какой режим перечисления (enumeration mode) и тип кеширования использовать для папки. Я собираюсь использовать Set-SMBShare, чтоб осуществить гибкую настройку для только что созданной папки. Посмотрим это на примере 7.
Пример 7: Гибкая настройка папки
PS C:\> Set-SmbShare -Name Files -EncryptData $True -FolderEnumerationMode AccessBased -CachingMode Documents -CimSession SRV2K12RC Confirm Are you sure you want to perform this action? SRV2K12RC: Performing operation 'Modify' on Target '*,Files'. [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):Указанное выше применяется к одной единственной папке, но вы с легкостью можете использовать Get-SMBShare для извлечение всех папок и их последующей передачи в Set-SMBShare и применения изменений к ним всем:
Get-SMBShare -CimSession SRV2K12RC -Special $False | Set-SmbShare -EncryptData $True -Confirm:$falseЭта команда извлечет все папки (кроме административных папок) на компьютере SRV2K12RC и установим свойство EncryptData в значении True. Мне не хочется подтверждать каждое действие, поэтому переключатель Confirm установлен в значение False. Set-SMBshare не запишет ничего в конвейер, в том случае если вы не используете –Passthru. Как видите, я смог изменить все с помощью одной единственной команды.
Удаление сетевых папок
Напоследок удалим сетевую папку. Код в примере 8 полностью отключает совместный доступ к папке, которую я только что создал. Можно ли это сделать проще? Конечно, структура папок до сих пор на файловом сервере.
Пример 8: Удаляем сетевую папку
PS C:\> Remove-SmbShare -Name Files -CimSession SRV2K12RC Confirm Are you sure you want to perform this action? SRV2K12RC: Performing operation 'Remove-Share' on Target '*,Files'. [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):Сводим воедино
А теперь давайте сведем все в одном скрипте. Не вдаваясь с детали кода, отмечу, что команды могут быть запущены параллельно. Например, после создания папки, создаю сетевую папку и устанавливаю NTFS разрешения в то же время, см. пример 9.
Пример 9: Создаем сетевую папку и устанавливаем NTFS разрешения
Workflow New-FileShare { Param( [string]$Name, [string]$Path, [string]$Principal, [string]$Right="Modify" ) #Это делаем в первую очередь. Sequence { #создаем папку Write-Verbose -Message "Creating new folder $path on $pscomputername" $newfolder = New-Item -Path $path -ItemType Directory } #Идем дальше. Sequence { Parallel { #эти команды могут быть запущены параллельно InlineScript { Write-Verbose -Message "Modifying NTFS permissions" Write-Verbose -Message "Creating entry for $using:principal with a right of $using:Right" $entry=New-Object -typename System.Security .AccessControl.FileSystemAccessRule -argumentlist $using:Principal,$using:Right,"allow" #получаем существующий ACL $acl = Get-ACL -path $using:path #добавляем новую запись $acl.AddAccessRule($entry) Write-Verbose -Message "Applying the new ACL" Set-Acl -Path $using:path -AclObject $acl } #inline #Создаем сетевую папку. Write-Verbose -message "Creating the file share $name" $newshare = New-SmbShare -Name $name -Path $path -Description "File share for $principal" -EncryptData $True -FolderEnumerationMode AccessBased -CachingMode Documents -FullAccess "$env:userdomain\domain admins" -ChangeAccess $Principal } #Parallel } #sequence #Получаем результаты. Sequence { Parallel { Write-Verbose -Message "Getting the new share" Get-SmbShare -Name $name Write-Verbose -Message "Getting the new share access" Get-SmbShareAccess -Name $name } }Этот скрипт создает новую сетевую папку, присваивает разрешения пользователю или группе. Я могу запустить ее из-под Windows 8 или на файловом сервере Windows Server 2012, использовав следующую команду (которая должна быть введена в одну строчку):
New-FileShare -Name adeco -Path c:\shares\adeco -Principal jdhlab\adeco -Right "FullControl" -PSComputerName SRV2K12RCПроцесс займет пару секунд. Результаты на скриншоте ниже.
Нет ничего плохого в том, чтобы использовать обыкновенный графический интерфейс для того же самого. Однако если Вам нужны специализированные отчеты или же вы желаете автоматизировать этот процесс, PowerShell подойдет как нельзя лучше.
Все примеры можно скачать здесь. Автор также рекомендует посетить форумы на сайте PowerShell.org по всем вопросам, связанным с PowerShell.
habr.com