私の雇用主は、Windows 7ラップトップのHOMEDRIVEを "M:"(マップされたネットワークドライブ)に設定し、HOMEPATHを "\"に設定するActive Directoryグループポリシーを持っています。その共有ドライブのルートに対する読み取り専用のアクセス許可を持っているため、Windowsのホームディレクトリにファイルやディレクトリを作成できません。 IT部門と協力する私の試みは失敗しました。
meからgloballyに、起動時またはログイン時にこれらの環境変数を変更する方法はありますか? allアプリケーションで代替値(「C:」や「\ Users\myname」など)を使用する必要があります。ユーザーのホームディレクトリに設定ファイルを保存するユーティリティ(gvimなど)をいくつかインストールしています。
[〜#〜]重要[〜#〜]:「システムのプロパティ>環境変数」でこれらの環境変数を変更機能しません。これらをユーザー変数とシステム変数の両方に設定してみました(再起動を含む)。タイピングSET HOME
in DOSウィンドウでは、私の設定が無視されていることを明確に示しています。また、Windowsショートカットで「開始」を使用するとnotエクスプローラのコンテキストメニューなどが必要になるため、これを解決します正しく動作するアイテム(「Vimで編集」など)。
私はこの会社のラップトップの管理者権限を持っていますが、Win7の第一人者ではありません。昔は、ブートスクリプトが1分でこれを解決していたでしょう。今日でも可能ですか?ありがとう。
以下は私が開発したいくつかのハックです。エレガントではありませんが、企業環境で機能する場合があります。
多くのアプリケーションはHOMEDRIVE/HOMEPATHのみを使用しているようです。その場合、UNCドライブの管理パスを介して、ベースドライブ文字をローカルユーザーパスに再マップする起動スクリプトを作成できます。
set HOME
HOMEDRIVE=G:
HOMEPATH=\
HOMESHARE=\\Server\Users\username
Net Use g: /delete
Net Use g: \\localhost\C$\Users\username
名前で「サーバー」にまったくアクセスする必要がない場合は、グループポリシー設定が失敗し、ローカルマシンにフォールバックする可能性があります。これを行う最も簡単な方法は、次のようにエントリをC:\ Windows\System32\drivers\etc\hostsに追加することです。
127.0.0.1 Server
再起動すると、次のように表示されます。
set HOME
HOMEDRIVE=C:
HOMEPATH=\Users\username
一部のUNCパスの名前で「サーバー」にアクセスしたいが、他のUNCパスをローカルパスで上書きしたい場合は、次のabominationを開発しました。注:「サーバー」への直接サーバー接続は、引き続きローカルマシンに解決されます。 「サーバー」がファイルサーバーのみの場合にのみ、このソリューションをお勧めします。
C:\ Windows\System32\drivers\etc\hostsを変更して、「サーバー」をローカルマシンにリダイレクトします。
127.0.0.1 Server
次のMulti-Stringレジストリ値をHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_に追加して、資格情報がローカルUNCパスに渡されるようにします。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
BackConnectionHostNames = Server
サーバーのルートとして機能するダミーディレクトリを作成します。
set DUMMY_LOC=C:\Server_Dummy
mkdir %DUMMY_LOC%
cd /D %DUMMY_LOC%
実サーバーに向けるUNCパスごとに:
rem Alternatively you can use an IP below, but it is more likely to break if DNS changes
set SERVER_FQDN=Server.network.blah.com
rem Take a look at what's available...
net view \\%SERVER_FQDN%\
mklink /D Remote_Example \\%SERVER_FQDN%\Remote_Example
net share Remote_Example=%DUMMY_LOC%\Remote_Example /grant:everyone,FULL
ローカルに定義するUNC共有ごとに(ユーザーなど):
rem The link isn't really necessary for the share, I just find it easier to manage when all of these hacks are in the same directory
mklink /D Users C:\Users
net share Users=%DUMMY_LOC%\Users /grant:everyone,FULL
リブート
この例では、次のUNCパスを解決できます。
\\Server\Remote_Example => \\Server.network.blah.com\Remote_Example
\\Server\Users => C:\Users
このパス解決は、ドライブマッピングの前に行う必要があります。マッピングに関連付けられたUNCパスが有効である限り(ローカルでもリモートでも)、ドライブ文字は期待どおりに動作するはずです。
たとえば、私の設定では、次の変数がドメインによって強制されています。
set HOME
HOMEDRIVE=G:
HOMEPATH=\
HOMESHARE=\\Server\Users\username
しかし、私のマッピングにより、結果は次のとおりです。
G: => \\Server\Users\username => C:\Users\username
私が見つけた最良の解決策は、ログイン中とuserinit.exe
の前に変数を設定することでした。
これは私がやったことです。最初にC:\Windows\System32\userinit.cmd
にバッチファイルを作成しました
@ECHO OFF
SET HOMEDRIVE=C:
SET HOMEPATH=\Users\%USERNAME%
SET HOMESHARE=\\localhost\C$\Users\%USERNAME%
@START C:\Windows\system32\userinit.exe
レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
の値をC:\Windows\System32\userinit.cmd
に変更しました。
詳細: https://technet.Microsoft.com/en-us/library/cc939862.aspx
スタートアップスクリプトでSETX
を使用しましたが、それでうまくいきました。私の answer を参照してください。
誰かがグーグル経由でこの質問に来る場合に備えて、私はこれを投稿しています。ホームディレクトリを変更してISみんな怒り狂う代わりに、仮想マシンで開発をセットアップして実行しました。MicrosoftはWidowsを提供していますXP virtual inモード http://www.Microsoft.com/windows/virtual-pc/download.aspx
やや簡単な代替策は、ログオン時のスケジュールされたタスクとして以下のスクリプト(env-reset.vbs)を実行し、ロックを解除して、おそらく数分ごとに実行することです。
Set Shell = WScript.CreateObject("WScript.Shell")
Set venv = Shell.Environment("Volatile")
scriptingHost = LCase(Right(Wscript.FullName,Len("cscript.exe")))
interactive = Wscript.Interactive And (scriptingHost = "cscript.exe")
If interactive Then
Wscript.Echo "WSCRIPT"
Wscript.Echo " ScriptingHost = " & scriptingHost
Wscript.Echo " FullName = " & Wscript.FullName
Wscript.Echo " ScriptFullName = " & Wscript.ScriptFullName
End If
If interactive Then Call showVolatile()
homedrive = Left(venv("USERPROFILE"),2)
homepath = Mid(venv("USERPROFILE"),3)
If interactive Then
Wscript.Echo "COMPUTED"
Wscript.Echo " homedrive = " & homedrive
Wscript.Echo " homepath = " & homepath
End If
venv("HOMEDRIVE") = homedrive
venv("HOMEPATH") = homepath
If interactive Then Call showVolatile()
Wscript.Quit(0)
Sub showVolatile()
Wscript.Echo "VOLATILE"
Wscript.Echo " USERPROFILE = " & venv("USERPROFILE")
Wscript.Echo " HOMEDRIVE = " & venv("HOMEDRIVE")
Wscript.Echo " HOMEPATH = " & venv("HOMEPATH")
Wscript.Echo " HOMESHARE = " & venv("HOMESHARE")
End Sub
これらのパスは、ユーザープロファイルがある場所に自動的に設定されると思います。参照しているホームドライブは、ntuser.datとアプリケーションデータ、およびその他のユーザープロファイルフォルダーがある場所ですよね? NT3.xに戻ると、「ユーザープロファイル」は設定を含むユーザーレジストリハイブにすぎず、ユーザーごとに個別のホームパスを設定できました。それらは、デスクトップ、マイドキュメント、スタートメニューなどのユーザープロファイルとしてNT4で統合されました。
すべてのプロファイルの場所は、以下のレジストリキーに保存されます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
特別なプロファイルとサブキーの値がいくつか見つかります。システム上のアクティブなプロファイルごとに1つです。それらは、所属するユーザーアカウントのSIDによって設定されます。あなたのパスを見つける最も簡単な方法は、正しいパス(ProfileImagePath
値の下)を探してスクロールすることです。その値を任意のパスに変更できるはずです。次回ログオンしたときに有効になります。必ず最初にファイルを新しいパスにコピーしてください。
ログインしているアカウントからプロファイルを移動する必要がある場合(つまり、MikeCとしてログインしていて、MikeCのプロファイルをコピーしようとしている場合)、ntuser.datファイル(HKEY_CURRENT_USER
を含むレジストリハイブ)は次のようになります。カーネルによってロックされています。ハイブは引き続きコピーできます。regeditに移動し、HKEY_CURRENT_USER
を右クリックして、[エクスポート]を選択します。 タイプをレジストリHiveファイルに変更する、新しい場所にntuser.datとして保存します。
私の経験では、何かが正しく設定されていないためにwinlogonがプロファイルのロードに問題がある場合、デフォルトのプロファイルから新しいコピーを作成するか、そのセッションで使用する一時的なコピーを提供し、引き続きログを記録できますただし、何か問題が発生した場合に備えて、システムで使用する別の管理者ログインをお勧めします。