3

私は現在、PowerShellとBatchを使用して大量のユーザー作成スクリプトに取り組んでいます。現在、スクリプトは95行で、これまでにバッチで作成した中で最大のスクリプトです。

スクリプトを可能な限り自動化し、大量のユーザーの作成を支援する必要のあるクライアントにスクリプトを提供することを計画しています。これを行うには、21行の設定ファイルがあり、必要な変数の1つは完全なドメイン名です(これはdsaddに必要です)

これに伴う問題は、ユーザーがこれに対応する変数をいくつでも持つ可能性があることです。テストラボの2つから、学校のような場所の4つまでです。これまでのところ、トークンを分離することはできますが、すべてを%% a、%% bなどの変数として保存する必要があり、すべてを%%aとして保存する必要はありません。トークンの数は動的になるので、これに対する何らかの解決策が必要です。このようなもの(はい、これは正しい構文ではないことを私は知っています):

if number of tokens=4 (
dsadd "cn=%%a,ou=%%b,dc=%DSuffix1%,dc=%DSuffix2%,dc=%DSuffix3%,dc=%Dsuffix4% )

その行の%%aと%%bは、ユーザーリストのExcelファイルから読み取るコードの後半にある別のforループの変数です。2つのトークンから4つのトークンまで、そのようなものが必要になります。これに対する解決策が純粋にBATCHでなくてもかまいませんが、それが私の好みのオプションです。

ありがとう。

編集:これが私が現在持っているforループです、これはユーザーを追加する別のより大きなforループにネストされています:

for /f "tokens=1,2,3,4 delims=." %%a in (Settings.ini) do (
set L=22
if !L!=22 set DSuffix1=%%a&& set DSuffix2=%%b&& set DSuffix3=%%c&& set DSuffix4=%%d
)

settings.iniファイルには、Exchangeサーバーやユーザーのホームディレクトリへのパスなど、さまざまな設定が含まれています。私が解釈する必要がある行は次のように見える22行目です。

DOMAINNAME.SUFFIX(.SUFFIX.SUFFIX.SUFFIX)実際の例は次のようになります:testlab.localまたはtestlab.ghamilton.local

テストラボの場合、設定はドメイン名とサフィックスのみにする必要がありますが、学校や機関などの他の場合、ドメインサフィックスの数は最大4つまで可能です。これを解釈したい。

編集:コードを正しくインデントすることができました、申し訳ありません。

4

2 に答える 2

3

私があなたを正しく理解しているなら、あなたはのような文字列を持っていて、domain.foo.bar.bazそれをに変更したいと思いますdc=domain,dc=foo,dc=bar,dc=baz

これはどう?

set domain=domain.foo.bar.baz
echo dc=%domain:.=,dc=%

これをエコーする必要があります:

dc=domain,dc=foo,dc=bar,dc=baz

その%domain:.=,dc=%行は環境変数を拡張していますが、すべてを。%domain%に置き換えています。詳細については、 http://ss64.com/nt/syntax-replace.htmlを参照してください。.,dc=

環境変数で文字列の置換を行うには、最初に値を環境変数に含める必要があります。上記の手法と組み合わせて、settings.iniから22行目を読み取るスクリプトを次に示します。

setlocal enabledelayedexpansion
set L=0
for /f %%a in (settings.ini) do (
    set /a L=!L! + 1
    if !L! equ 22 (
        set domain=%%a
        echo dc=!domain:.=,dc=!
    )
)

L私たちがいる行を数えるために使用されています。22行目に到達したら、環境変数を行全体の値(%%a)に設定し、上記のように文字列置換を実行します(ただし、遅延拡張を利用するの!ではなく)。%

もちろん、の代わりに、次のechoようなことをします

dsadd "cn=%cn%,ou=%ou%,dc=!domain:.=,dc=!"
于 2013-03-09T05:21:50.600 に答える
0

これは、個別のトークンを取得する方法を示すための小さなスニペットです (delims はスペースとタブですが、変更できます)。

@echo off & setlocal enabledelayedexpansion
for /f "tokens=1,2,3,4" %%a in (test.txt) do (
    set token1=%%a
    set token2=%%b
    set token3=%%c
    set token4=%%d
    set full=%%a%%b%%c%%d
)
set token
set full
pause>nul

test.txt内容:

first second third

出力は次のとおりです。

token1=first
token2=second
token3=fourth
full=firstsecondthird

したがって、次のようなものでトークンがいくつあるかを判断できます

for /l %%i in (4,-1,1) do if not defined token%%i set amount=%%i

または、同じ線に沿った何か。

それが役立つことを願っています。

于 2013-03-09T05:27:25.360 に答える