web-dev-qa-db-ja.com

Windows 7ユーザーとしてのHOMEDRIVEとHOMEPATHのオーバーライド

私の雇用主は、Windows 7ラップトップのHOMEDRIVEを "M:"(マップされたネットワークドライブ)に設定し、HOMEPATHを "\"に設定するActive Directoryグループポリシーを持っています。その共有ドライブのルートに対する読み取り専用のアクセス許可を持っているため、Windowsのホームディレクトリにファイルやディレクトリを作成できません。 IT部門と協力する私の試みは失敗しました。

meからgloballyに、起動時またはログイン時にこれらの環境変数を変更する方法はありますか? allアプリケーションで代替値(「C:」や「\ Users\myname」など)を使用する必要があります。ユーザーのホームディレクトリに設定ファイルを保存するユーティリティ(gvimなど)をいくつかインストールしています。

[〜#〜]重要[〜#〜]:「システムのプロパティ>環境変数」でこれらの環境変数を変更機能しません。これらをユーザー変数とシステム変数の両方に設定してみました(再起動を含む)。タイピングSET HOMEin DOSウィンドウでは、私の設定が無視されていることを明確に示しています。また、Windowsショートカットで「開始」を使用するとnotエクスプローラのコンテキストメニューなどが必要になるため、これを解決します正しく動作するアイテム(「Vimで編集」など)。

私はこの会社のラップトップの管理者権限を持っていますが、Win7の第一人者ではありません。昔は、ブートスクリプトが1分でこれを解決していたでしょう。今日でも可能ですか?ありがとう。

51
MykennaC

以下は私が開発したいくつかのハックです。エレガントではありませんが、企業環境で機能する場合があります。

HOMEDRIVEのみ

多くのアプリケーションはHOMEDRIVE/HOMEPATHのみを使用しているようです。その場合、UNCドライブの管理パスを介して、ベースドライブ文字をローカルユーザーパスに再マップする起動スクリプトを作成できます。

set HOME
HOMEDRIVE=G:
HOMEPATH=\
HOMESHARE=\\Server\Users\username

Net Use g: /delete
Net Use g: \\localhost\C$\Users\username

HOMEDRIVEローカルデフォルト

名前で「サーバー」にまったくアクセスする必要がない場合は、グループポリシー設定が失敗し、ローカルマシンにフォールバックする可能性があります。これを行う最も簡単な方法は、次のようにエントリをC:\ Windows\System32\drivers\etc\hostsに追加することです。

127.0.0.1   Server

再起動すると、次のように表示されます。

set HOME
HOMEDRIVE=C:
HOMEPATH=\Users\username

ハイブリッドローカル/リモートUNCパスを使用したHOMEDRIVE/SHARE

一部のUNCパスの名前で「サーバー」にアクセスしたいが、他のUNCパスをローカルパスで上書きしたい場合は、次のabominationを開発しました。注:「サーバー」への直接サーバー接続は、引き続きローカルマシンに解決されます。 「サーバー」がファイルサーバーのみの場合にのみ、このソリューションをお勧めします。

  1. C:\ Windows\System32\drivers\etc\hostsを変更して、「サーバー」をローカルマシンにリダイレクトします。

    127.0.0.1   Server
    
  2. 次のMulti-Stringレジストリ値をHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_に追加して、資格情報がローカルUNCパスに渡されるようにします。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\
    BackConnectionHostNames = Server
    
  3. サーバーのルートとして機能するダミーディレクトリを作成します。

    set DUMMY_LOC=C:\Server_Dummy
    
    mkdir %DUMMY_LOC%
    cd /D %DUMMY_LOC%
    
  4. 実サーバーに向ける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
    
  5. ローカルに定義する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
    
  6. リブート

この例では、次の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
41
Terrance

私が見つけた最良の解決策は、ログイン中と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

3
Ali Malekpour

スタートアップスクリプトでSETXを使用しましたが、それでうまくいきました。私の answer を参照してください。

1
Mark Mikofski

誰かがグーグル経由でこの質問に来る場合に備えて、私はこれを投稿しています。ホームディレクトリを変更して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
0
camilohe

これらのパスは、ユーザープロファイルがある場所に自動的に設定されると思います。参照しているホームドライブは、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がプロファイルのロードに問題がある場合、デフォルトのプロファイルから新しいコピーを作成するか、そのセッションで使用する一時的なコピーを提供し、引き続きログを記録できますただし、何か問題が発生した場合に備えて、システムで使用する別の管理者ログインをお勧めします。

0
Chris Smith