
この記事は、1Cで行われた人事異動に応じて人を作成、移動、および解雇するための操作の自動化に専念しています。
スクリプトの原則は、1Cからダウンロードされたユーザーデータを解析し、このデータをさらに使用してスクリプト変数に割り当てることです。
当社では、1Cでのユーザーの確立後に、データを含むCSVファイルが作成されます。以下に例を示します。
| 文書タイプ | userName | フィオ | 部門 | 部門 |
|---|
| 雇う | USERtester1 | イワノフイワンイワノビッチ | ディスペンサー | 処分および書類事務局 |
| 動いている | USERtester2 | ペトロフ・イヴァン・イワノビッチ | 拡張マネージャー | 信用保険部 |
| 解雇 | USERtester3 | シドロフ・イヴァン・イワノビッチ | 拡張マネージャー | 信用保険部 |
スクリプトには、操作のタイプに応じて3つの関数(usrcreate、usrmove、usrdelete)が含まれています。採用
部門の役職と名前に基づいてユーザーテンプレートを探しています。必要な属性とグループを取得し、それらを新しいユーザーに書き込むと同時に、ホームフォルダーを作成して接続し、郵送先住所も添付します。 レポートは、ユーザー名、フルネーム、および追加されたグループのリストとともにメールに送信されます。
人事の動き
新しい役職と従業員の新しい部門のユーザーテンプレートを見つけ、そこから新しいグループとOUアドレスのリストを取得し、見つかった後、ローミングユーザーから古いグループを削除して新しいグループに追加し、同時に新しい部門に対応するOUに転送します(そのような部門がある場合) AD)、および新しい位置にそれぞれ変更します。 新しい役職、部門、グループを含むレポートがメールに送信されます。
解雇
メールボックスを切断し、すべてのグループからユーザーを削除し、無効なユーザーのフォルダーに移動して、アカウントを切断します。 ユーザーが切断され、解雇されたというレポートがメールに送信されます。
スクリプトにはいくつかのチェックが含まれています。ExchangeおよびActive Directoryスナップインを実行する必要があることを確認します
このチェックでは、見つからない場合に処理されるデータの検索が行われ、スナップインが読み込まれないため、約7秒の時間が節約されます。
変数で処理されるデータを確認する$ getstaff | $ movestaff | $ delstaff
ユーザーの作成、移動、削除の機能を実行するため。
作成されたユーザーの存在の確認
重複したユーザー作成タスクを確認します。
ユーザーネットワークフォルダーを確認する
フォルダーの存在エラーを回避するには。
位置と部門の検証
ユーザーがすでに新しい位置に移動している場合に、重複した転送要求を確認します。
ユーザー解雇チェック
ユーザーが既に解雇されている場合に、解雇の申請の重複をチェックする。
スクリプト変数の説明:| $ smtpserv | メール送信(サーバー) |
|---|
| $ smtpfrom | 送料(差出人) |
|---|
| $ smtpto | 送料(To) |
|---|
| $ opertype | ユーザー操作の種類 |
|---|
| $ usrname | SamAccountName |
|---|
| $ FIO | 姓名パトロニミック |
|---|
| $ Curdate | day.month.year形式の現在の日付 |
|---|
| $ del | $ Delstaff配列要素 |
|---|
| $デルスタッフ | 終了のためのユーザーデータ |
|---|
| $部門 | 部門 |
|---|
| $ dir | 1CがCSVをアンロードする場所 |
|---|
| ゲット | $ Getstaff配列要素 |
|---|
| $ getstaff | 雇用のためのユーザーデータ |
|---|
| $グループ | レポートのコピーされたグループのリスト |
|---|
| $移動 | $ Movestaff配列要素 |
|---|
| $移動スタッフ | フレーム移動のユーザーデータ |
|---|
| $ newusername | 名 |
|---|
| $ newusersurname | 姓 |
|---|
| $ポジション | 役職 |
|---|
| $ sdel | 区別された$ del |
|---|
| $ sget | 識別$ get |
|---|
| $ smove | 特別な$の動き |
|---|
| $シャブロン | SamAccountNameユーザーテンプレート |
|---|
| $ spisokf | 1Cからのアップロードディレクトリ内のファイルのリスト |
|---|
| $本日 | 今日の人事異動を含むファイル |
|---|
| $ usrcopyfrom | ユーザーテンプレート |
|---|
| $ usrexist | 存在を確認するためのユーザーログイン |
|---|
| $ usrpath | ADのユーザーの場所 |
|---|
| $ usrprop | テンプレートユーザープロパティ |
|---|
| $ usrdomain | あなたのドメイン |
|---|
| $セッション | Exchange管理コンソールとのセッション |
|---|
| $ usrshare | NASのユーザーフォルダーアドレス |
|---|
| $パス | ユーザー仮パスワード |
|---|
| $会社 | 会社名 |
|---|
| $ usrstate | 会社の所在地 |
|---|
| $ usrCity | 市区町村 |
|---|
| $ usrStreetAddress | ストリートハウスビル |
|---|
| $ curuserpath | ADの現在のローミングユーザーの場所 |
|---|
| $ newuserpath | ADのローミングユーザーターゲット |
|---|
| $ usrmoveddep | 転送順序の重複を確認する現在のユーザー部門 |
|---|
| $ usrmovedtit | 転送順序の重複をチェックするためのユーザーの現在の位置 |
|---|
$ get | $ move | $ del配列の要素| [0] | 雇用/移動/解雇の種類 |
|---|
| [1] | SamAccountName |
|---|
| [2] | 氏名 |
|---|
| [3] | 役職 |
|---|
| [4] | 部門 |
|---|
スクリプト自体:
# $smtpserv = "post.domain.local" $smtpfrom = "AUTOUSERCHANGER@domain.local" $smtpto = "sysadmin@domain.local" $encoding = [System.Text.Encoding]::UTF8 $smtpBody = "" # 1 $dir= "\\fileserver\1C\" # $usrdomain="domain.local" # csv $spisokf=Get-Childitem -File -Path $dir*.csv | Select-Object -ExpandProperty Name # $curdate=Get-Date -Format dd.MM.yyyy $todayf=$spisokf | Select-String $curdate # $getstaff= Get-Content $dir$todayf |Select-String " " $movestaff= Get-Content $dir$todayf |Select-String "" $delstaff= Get-Content $dir$todayf |Select-String "" # EXCHANGE ActiveDirectory if ($getstaff -ne $null -or $movestaff -ne $null -or $delstaff -ne $null) { $Session=New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://post.domain.local/PowerShell/ -Authentication Kerberos Import-PSSession $Session -AllowClobber | out-null Import-Module ActiveDirectory } else { Write-Host " " } # function usrcreate () { # ForEach ($get in $getstaff) { # $sget=$get -split (";") $opertype = $sget[0] $usrname=$sget[1] $FIO=$sget[2] $Position=$sget[3] $department=$sget[4] # $usrexist=Get-ADUser -filter {(SamAccountName -eq $usrname)} | Select-Object -ExpandProperty SamAccountName if ($usrexist -eq $null) { # $usrshare="\\FILESERVER\Users\$usrname" # $shablon=Get-ADUser -filter { (physicalDeliveryOfficeName -like $department) -and (title -like $Position) -and (Enabled -eq $true) -and (SamAccountName -ne $usrname)} | Select-Object -ExpandProperty SamAccountName $usrcopyfrom=$shablon[1] #-Path $usrprop= Get-ADUser -Identity $usrcopyfrom | Select-Object -ExpandProperty DistinguishedName $usrpath= ($usrprop -split